2013-09-04 5 views
6

私は、すでにまったく同じタスクを実行している "LoginCtrl"で動作するようにテストしています。私はこれが本当に小さく見落とされた問題だと確信しています。助けを前もっておかげてください:)

httpBackendの私のテストでは、期待値/応答を設定しましたが、私がhttpBackend.flush()を実行したときには、あたかも期待値を設定していないかのようです。

テストコード:

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); 
     })); 
    }); 


}); 

出力応答:

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

場合にのみ、Dは情報のための私の答えを参照してください、問題を考え出しました。 –

答えて

1

私はそれが何かを発見しました。 userJohnDoeCredentials(私は私の前のテストのために使用されていた別の変数名):私のregister_user()関数は、未定義の変数に設定されていた$scope.userを参照しました。

なく、私のIDEは、未定義の変数を参照する私について文句はないし、それは私のjslintテストのすべてを渡していたので、それはあまりにも奇妙だが、まあまあ理由を確認してください。それは固定です:今、私はモック要求が、私はそれが欲しいものを返すために得ることができる...

+0

うれしいことに、あなたはそれを修正しました。私はモックにあなたの痛みを感じます。彼らはまったく違う動物です。 – MBielski

3

私が最初に考えたのは、あなたのコントローラをインスタンス化するときに何かが要求を行っているということです。コントローラの宣言行の後に$ httpBackend.flush()を追加し、それが解決するかどうかを確認してください。また、あなたの$ scope。$ digestは、前回ではなく$ httpBackend.flushの後にあるべきですか?

+0

'flush()'呼び出しを移動しようとしましたが、いつでも 'digest()'の前に呼び出されました。エラー。 は、それは私の 'httpBackend.whenPOST'宣言は私のコントローラが私のために、この問題を引き起こしていたものであるリクエストメソッドを呼び出しますデフォルトでは、何らかの理由 –

+1

のために発射されていないように私には思えます。 –