2013-09-04 1 views
6

Je vais commencer par poser cette question en disant que j'ai déjà passé un test pour mon "LoginCtrl" qui effectue presque exactement la même tâche. Je suis sûr que c'est un problème de quelque chose de vraiment petit que j'ai oublié. Merci d'avance pour toute aide :)

J'ai défini la valeur attendue/réponse pour httpBackend pour mon test, mais quand je cours httpBackend.flush(), c'est comme si je ne fixais jamais l'attente.

Code d'essai:

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


}); 

réponse de sortie:

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

Compris le problème, voir ma réponse pour info. –

Répondre

1

J'ai découvert ce que c'était. ma fonction register_user() faisait référence à $scope.user, qui était en train de définir une variable indéfinie: userJohnDoeCredentials (un nom de variable différent que j'avais utilisé pour mon test précédent).

Je ne sais pas pourquoi mon IDE ne se plaignait pas de ma référence à une variable indéfinie, et il passait tous mes tests jslint, donc c'est étrange aussi, mais mec. C'est réglé: D Seulement si maintenant je pouvais obtenir la demande fictive de retourner ce que je veux à ...

+0

Content de l'avoir réparé. Je sens ta douleur sur les mocks. Ils sont un animal complètement différent. – MBielski

3

Ma première pensée est que quelque chose fait une demande lorsque vous instancier votre contrôleur. Peut-être essayer d'ajouter le $ httpBackend.flush() après votre ligne de déclaration de contrôleur et voir si cela résout. En outre, votre $ scope. $ Digest devrait-il être après le $ httpBackend.flush au lieu d'avant?

+0

J'ai essayé de déplacer l'appel de 'flush()', mais à chaque fois qu'il est appelé avant digest() ', je reçois un message" No pending request to flush! " Erreur. Il me semble que ma déclaration 'httpBackend.whenPOST' ne se déclenche pas pour une raison quelconque –

+1

Par défaut, mon contrôleur appelle une méthode de requête qui est à l'origine de ce problème. –

Questions connexes