я следующий код на заводе:Как я могу проверить, что дает обещание AngularJS, используя Jasmine?
var app = angular.module('plunker', []);
app.factory('apiFactory', function($http) {
return {
'call':function(){
$http.get('http://www.google.com').then(function(){
return 'I visited Google!';
});
}
};
});
И следующий тест Жасмин:
describe('Testing apiFactory', function() {
var $scope,
apiFactory,
$http,
$q,
rootScope;
beforeEach(module('plunker'));
beforeEach(inject(function($rootScope, _apiFactory_, _$http_, _$q_, _$rootScope_) {
apiFactory = _apiFactory_;
$http = _$http_;
$q = _$q_;
rootScope = _$rootScope_;
}));
it('should return "I visited Google!"', function(){
var deferred = $q.defer();
spyOn($http, 'get').and.returnValue(deferred.promise);
deferred.resolve();
apiFactory.call();
rootScope.$apply();
expect($http.get).toHaveBeenCalledWith('http://www.google.com');
});
});
Как вы можете видеть выше, я знаю, как проверить http.get обещание $ было называется, но, как я могу проверить, что функция перешла к then()
метод возвращает «
Вот plunkr для этого кода» я посетил Google! ": http://plnkr.co/edit/DrKGV11eTpi2CrtYtffp
Правильно, вы просто вызываете метод 'then()' по возвращенному обещанию (BTW, я забыл добавить возврат в свой пример, но у меня есть его в моем коде) и проверить параметры, с которыми он был вызван. Я должен был подумать об этом! Большое спасибо, отличный ответ! –