2017-06-14 1 views
0

Ich habe folgende Stück Code (vereinfacht):Unit-Tests AngularJS mit Jasmin: dann - Fang Test Ausgabe

angular 
.module('myApp') 
.controller('MyController', MyController); 

function MyController(wordService) { 

    getWord(); 

    function getWord() { 

     return wordService.getNextWord() 
      .then(doSomethingWithWord) 
      .catch(doSomethingFailure); 

     function doSomethingWithWord(response) { 
      // ... something 
     } 

     function doSomethingFailure() { 
      // ... failing 
     } 
    } 
} 

Und ich habe es zu testen. ? ich jetzt mit diesem über einen Tag zu kämpfen, und ich kann es :(

Wie testen diesen Code funktioniert nicht bekommen

Antwort

0

Für die Zukunft habe ich es aus: Ich habe $ verwenden q Service und Anforderung Winkelverdauzyklus

describe('MyController', function() { 

    var $controller, myController, wordService, $q, deferredResponse, scope; 

    beforeEach(function() { 
     module('myApp'); 
     inject(function(_$controller_, _wordService_, _$q_, $rootScope) { 
      $controller = _$controller_; 
      wordService = _wordService_; 
      scope = $rootScope.new(); 
      $q = _$q_; 
     }); 
     myController = $controller('MyController', {wordService:wordService}); 

     deferredResponse = $q.defer(); //deferring asynchronous response 
     spyOn(wordService, 'getNextWord').and.returnValue(deferredResponse.promise); 
    }); 

    describe('Testing WordService', function() { 
     it('Should get next word', function() { 
      deferredResponse.resolve({status: 200, data: {word: 123}}); 
      scope.$apply(); 

      expect(wordService.getNextWord).toHaveBeenCalled(); 
     }) 
    }) 
});