2016-01-08 8 views
1

Я тестирую контроллер, который использует сервис, который возвращает обещание. Я израсходовал сервис в своих тестах и ​​создал spy, чтобы проверить, действительно ли служба была вызвана.Jasmine spy and resolving promises

Однако я получаю эту ошибку

TypeError: 'undefined' is not a function 
    (evaluating 'spyOn(mockService, 'one').andReturn(deferred.promise)') 

My Test

beforeEach(inject(function($rootScope, $controller, $q) { 
    scope = $rootScope.$new(); 

    mockService = { 
    one: function(){ 
     // mock promise 
     var deferred = $q.defer(); 
     deferred.resolve([ 
     //my array 
     ]); 
     return deferred.promise; 
    }, 
    two: function(){ 
     // mock promise 
     var deferred = $q.defer(); 
     deferred.resolve([ 
     //my data 
     ]); 
     return deferred.promise; 
    } 
    } 
    var deferred = $q.defer(); 
    spyOn(mockService, 'one').andReturn(deferred.promise); 

    controller = $controller('MyCtrl', { 
    $scope: scope, 
    mockService: mockService 
    }); 
})); 

it('should call mockService service', function(){ 
    //causes promises to check to see if they are fulfilled 
    scope.$digest(); 
    expect(mockService.one).toHaveBeenCalled(); 
}); 
+0

какая версия жасмина вы используете? – ericbn

+0

коррекция: версия 2.4.1 жасмина – tester123

ответ

1

Для Жасмин 2 вы должны использовать

spyOn(mockService, 'one').and.returnValue(deferred.promise); 

вместо andReturn().

Read the docs. Если вы переходите с Jasmine 1 на Jasmine 2, вы также можете захотеть read this.

Смежные вопросы