如何在 Angular 服务的这段代码中模拟对 then 的第二次调用。
myService.promise.then(function () {
userConfig = userService.getUserConfiguration();
}).then(function () {
//do more stuff
})
我知道我可以如下模拟第一个调用:
beforeEach(inject(function ($q) {
var deferred = $q.defer();
spyOn(myService.promise, 'then').and.returnValue({$promise: deferred.promise});
deferred.resolve();
}));
最佳答案
由于您要使用第一个 spy 返回 deferred.promise
,因此您只需监视 deferred.promise.then
即可创建第二个 spy 。
编辑:抱歉,我没有看到您将它包裹在一个对象中。您可以将该对象分配给一个变量并返回它。然后您可以为您的 spy 引用该对象的属性并执行类似 spyOn(returnObject.$promise, 'then')
的操作,假设变量名称为 returnObject。
beforeEach(inject(function ($q) {
var deferred_1 = $q.defer();
var return_1 = {$promise: deferred_1.promise};
var deferred_2 = $q.defer();
var return_2 = {$promise: deferred_2.promise};
spyOn(myService.promise, 'then').and.returnValue(return_1);
spyOn(return_1.$promise, 'then').and.returnValue(return_2);
deferred.resolve();
}));
关于javascript - 测试 promise 链 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28112560/