我有一个测试,需要运行一个promise,稍后在then
处理程序中运行另一个promise return函数。
第一个promise解析,并成功调用返回promise的下一个函数。但是,第二个承诺的当时处理程序永远不会触发。
有没有其他方法可以使用Jasmine 2.0测试嵌套的promises?
示例问题:
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();
})
});
答案 0 :(得分:1)
我不确定这是否也是原始代码中的问题,但在此示例中,您的第二个console.log没有触发,因为prom2
在此之后添加了新的超时第一次被冲了过来。来自prom2
的承诺然后等待这个新的超时刷新,这种情况永远不会发生:
prom1()
被称为prom2()
done()
被召唤。您可以尝试在已经存在的呼叫之后立即添加第二个$timeout.flush();
呼叫,这将刷新第二个超时,解决第二个保证,并记录丢失的消息。