2013-09-04 81 views
6

Tôi sẽ đọc câu hỏi này bằng cách nói rằng tôi đã nhận được một bài kiểm tra để làm việc cho "LoginCtrl" của tôi. Tôi chắc chắn đây là một vấn đề của một cái gì đó thực sự nhỏ tôi đã bỏ qua. Cảm ơn trước vì bất kỳ trợ giúp nào :)

Tôi đã đặt giá trị/phản hồi mong đợi cho httpBackend cho thử nghiệm của mình, nhưng khi tôi chạy httpBackend.flush(), dường như tôi chưa bao giờ đặt kỳ vọng.

đang kiểm tra:

describe('user register', function() { 
    var scope, RegisterCtrl, httpBackend, userJohnDoe, userJohnDoeRegistered, Restangular; 


    // TEST 
    beforeEach(module('LR.User.Register')); 


    describe('RegisterCtrl', function() { 
     beforeEach(inject(function ($controller, _$httpBackend_, $rootScope, _Restangular_, $state) { 
      scope = $rootScope.$new(); 
      httpBackend = _$httpBackend_; 
      Restangular = _Restangular_; 

      // Models 
      userJohnDoeRegistered = { 
       "access_token": "YzEyZDhjNjBlY2EwMTMxMmQzZGIzYWY5NDY4OGYwMjMzMGVjNDU3MDVhY2U0YjJmNDc1ODI3NWU0ODkzZGNkMQ", 
       "expires_in": 7200, 
       "token_type": "bearer", 
       "scope": null, 
       "refresh_token": "MmFhMTQ5NzU4ODI5ZjE2Mjk3ZjNlYzEwYzJkMjc4M2NkZjY2MjVkMjIwNWQzODUxYWNiYzY3NzIyMzEwYzJhNg", 
       "user": { 
        "username": "johndoe", 
        "email": "[email protected]", 
        "id": 1, 
        "first_name": "John", 
        "middle_name": "f", 
        "last_name": "Doe", 
        "created": "2013-09-04T10:46:10-0500", 
        "updated": "2013-09-04T10:46:10-0500" 
       }, 
       "status": "success", 
       "status_code": 200, 
       "status_text": "OK" 
      }; 
      userJohnDoe = { 
       "email": "[email protected]", 
       "first_name": "John", 
       "middle_name": "f", 
       "last_name": "Doe", 
       password: 'test123X', 
       passwordSecond: 'test123X', 
       client_id: '1_3b5zgimwg4kkko4wksk4sw0o48040o8ws8og8kg4wsowwkc44s' 
      }; 

      httpBackend.whenPOST('/register', userJohnDoe).respond(userJohnDoeRegistered); 


      RegisterCtrl = $controller('RegisterCtrl', {$scope: scope, $state: $state, Restangular: Restangular}); 
     })); 
     afterEach(function() { 
      httpBackend.verifyNoOutstandingExpectation(); 
      httpBackend.verifyNoOutstandingRequest(); 
     }); 


     it('should be able to register a fake user', inject(function() { 
      var resolvedRegistration; 
      var cb = function (response) { 
       // Expect the userJohnDoe object 
       resolvedRegistration = sanitizeRestangularOne(response); 

       console.log(logTestHeader('REGISTRATION RESPONSE') + 
        JSON.stringify(resolvedRegistration, null, ' ')); 
      }; 

      // Set credentials 
      scope.user = userJohnDoeCredentials; 

      // Call login 
      var register = scope.register_user().then(function() { 
       cb(); 
      }); 
      scope.$digest(); 
      httpBackend.flush(); 
      expect(resolvedRegistration).toEqual(userJohnDoeRegistered); 
     })); 
    }); 


}); 

Output phản ứng:

Chrome 29.0.1547 (Mac OS X 10.8.4) user register RegisterCtrl should be able to register a fake user FAILED 
    Error: Unexpected request: POST /register 
    No more request expected 
     at Error (<anonymous>) 
     at $httpBackend (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:959:9) 
     at y (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:64:282) 
     at g (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:62:272) 
     at r (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140) 
     at r (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140) 
     at /Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:97:293 
     at Object.g.$eval (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:104:502) 
     at Object.g.$digest (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:102:419) 
     at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:74:19) 
    Error: Declaration Location 
     at window.jasmine.window.inject.angular.mock.inject (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:1781:25) 
     at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:57:54) 
     at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:9:5) 
     at /Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:1:1 
+0

Đã giải quyết được vấn đề, hãy xem câu trả lời của tôi để biết thông tin. –

Trả lời

1

Tôi đã phát hiện ra nó là gì. chức năng register_user() của tôi đã tham chiếu $scope.user, được đặt thành biến không xác định: userJohnDoeCredentials (một tên biến khác mà tôi đã sử dụng cho thử nghiệm trước đó của mình).

Không chắc tại sao IDE của tôi không phàn nàn về việc tôi tham chiếu biến không xác định và nó đã vượt qua tất cả các kiểm tra jslint của tôi, vì vậy điều đó cũng lạ, nhưng meh. Đó là cố định: D Chỉ khi bây giờ tôi có thể nhận được yêu cầu giả để trả lại những gì tôi muốn ...

+0

Vui vì bạn đã khắc phục sự cố. Tôi cảm thấy đau của bạn trên mocks. Họ là một con vật hoàn toàn khác. – MBielski

3

Suy nghĩ đầu tiên của tôi là một cái gì đó được thực hiện một yêu cầu khi bạn nhanh chóng điều khiển của bạn. Có thể thử thêm $ httpBackend.flush() sau dòng khai báo bộ điều khiển của bạn và xem nó có giải quyết được không. Ngoài ra, nếu $ $Backend.flush của bạn tiêu tốn $ scope.

+0

Đã cố gắng di chuyển cuộc gọi 'flush()' xung quanh, nhưng bất cứ lúc nào nó được gọi trước 'digest()' Tôi nhận được một "Không có yêu cầu đang chờ xử lý!" lỗi. Dường như với tôi như tuyên bố 'httpBackend.whenPOST' của tôi không kích hoạt vì lý do gì –

+1

Theo mặc định, trình điều khiển của tôi gọi phương thức yêu cầu là nguyên nhân gây ra sự cố này cho tôi. –