【发布时间】:2015-03-02 13:43:24
【问题描述】:
我有一个测试需要运行一个承诺,然后在其then 处理程序中运行另一个承诺返回函数。
第一个 Promise 被解析,并且成功调用下一个返回 Promise 的函数。但是,第二个承诺的 then 处理程序永远不会触发。
还有其他方法可以使用 Jasmine 2.0 测试嵌套的 Promise 吗?
示例问题:
describe("nested promise suite", function () {
var prom1 = function () {
var deferred = $q.defer();
$timeout(function () {
deferred.resolve('prom1');
}, 500)
return deferred.promise;
};
var prom2 = function () {
var deferred = $q.defer();
$timeout(function () {
deferred.resolve('prom2');
}, 500);
return deferred.promise;
};
iit("nested promise test", function (done) {
prom1()
.then(function (result) {
console.log('prom1 result ', result);
prom2()
.then(function (result2) {
console.log('prom2 result ', result2);
})
.finally(function() {
console.log('you did it');
})
})
.finally(done); //this causes promise one to resolve properly but unsure of how to make the second promise resolve properly
$timeout.flush();
})
});
【问题讨论】:
-
你应该始终
return来自then()回调的承诺。 -
不要使用deferred antipattern!
$timeout已经返回了一个承诺。
标签: javascript timeout jasmine karma-jasmine angular-promise