测试嵌套AngularJS与Jasmine的承诺
Testing nested AngularJS promises with Jasmine
我想测试嵌套的promise,但我不知道如何进行。
我该如何测试这样的场景?
angular.module('moduleA')
.factory('serviceA', function(serviceB){
return {
create: create
}
function create(){
return serviceB.create().then(function(d){
serviceB.doSomething();
return $state.go("app.list", { id: d.id }).then(function(){
serviceB.doSomethingElse();
});
})
};
});
我想在哪里测试
expect(serviceB, 'create').toHaveBeenCalled();
expect($state, 'go').toHaveBeenCalledWith("app.list", { id: newId });
expect(serviceB, 'doSomething').toHaveBeenCalled();
expect(serviceB, 'doSomethingElse').toHaveBeenCalled();
这是我的尝试:
describe('serviceA spec', function () {
var $rootScope, $state, serviceA, serviceB;
beforeEach(function () {
$state = {
go: function(){}
}
serviceB = {
create: {},
doSomething: {},
doSomethingElse: {}
}
module('app', function($provide){
$provide.value('serviceB', serviceB);
$provide.value('$state', $state);
});
inject(function (_$rootScope_, _serviceA_) {
serviceA =_serviceA_;
$rootScope = _$rootScope_;
});
});
it('should create', function(){
var newId = "555";
spyOn($state, 'go').and.callFake(function () {
var deferred = $q.defer();
deferred.resolve({});
return deferred.promise;
});
spyOn(serviceB, 'create').and.callFake(function () {
var deferred = $q.defer();
deferred.resolve({ id: newId });
return deferred.promise;
});
spyOn(serviceB, 'doSomething');
spyOn(serviceB, 'doSomethingElse');
serviceA.create();
expect(serviceB, 'create').toHaveBeenCalled();
expect($state, 'go').toHaveBeenCalledWith("app.list", { id: newId });
expect(serviceB, 'doSomething').toHaveBeenCalled();
expect(serviceB, 'doSomethingElse').toHaveBeenCalled();
$rootScope.$digest();
});
});
任何建议都将不胜感激
在每次承诺之后,您必须调用$rootScope.$apply()
,这样承诺就被填满了。
相关文章:
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- 从函数返回角度承诺
- 使用jasmine模拟对服务器的调用
- 我怎样才能获得承诺的价值
- 测试嵌套AngularJS与Jasmine的承诺
- jasmine 2.0测试angularjs的工厂方法,这是一个承诺
- Jasmine:测试返回的承诺是一个具体的例外
- 使用 Jasmine 2.4.* 测试返回承诺的服务
- 如何使用Jasmine测试AngularJS承诺返回的内容
- 在 Nodejs 中使用 Jasmine 测试承诺是否被解析或拒绝
- 如何与Jasmine测试棱角分明的承诺
- 在自定义的Jasmine匹配器中解决和拒绝承诺
- 如何用Jasmine 2.0测试ES6承诺
- 测试的承诺.然后是Jasmine 2
- 如何在单元测试中通过jasmine spy向angular控制器返回被拒绝/失败的承诺
- AngularJS - WebSQL -在Karma中用Jasmine测试返回多个承诺的对象
- 为什么这个单元测试失败了?(Jasmine/AngularJS的承诺)
- 测试AngularJS在Jasmine 2.0中的承诺
- 有条件地解决或拒绝$q承诺,使用 Jasmine 进行单元测试