Javascript 用茉莉花测试嵌套的AngularJS承诺
我希望测试嵌套的承诺,但我不确定如何进行 我如何测试这样的场景Javascript 用茉莉花测试嵌套的AngularJS承诺,javascript,angularjs,unit-testing,jasmine,angular-mock,Javascript,Angularjs,Unit Testing,Jasmine,Angular Mock,我希望测试嵌套的承诺,但我不确定如何进行 我如何测试这样的场景 angular.module('moduleA') .factory('serviceA', function(serviceB){ return { create: create } function create(){ return serviceB.create().then(function(d){ serviceB.doSomething();
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()
,我们将非常感谢您提供的任何建议,以确保承诺得到充分履行