Javascript 测试Jasmine 2.0中异步返回$q承诺的Angular服务
我有一个测试承诺结果的规范 允诺解决了,但随后,接住,最后处理者似乎从未开火,呼叫完成 因此,规范超时并失败,请参见Chrome开发者控制台的屏幕截图 茉莉花套房和规格Javascript 测试Jasmine 2.0中异步返回$q承诺的Angular服务,javascript,angularjs,jasmine,karma-runner,karma-jasmine,Javascript,Angularjs,Jasmine,Karma Runner,Karma Jasmine,我有一个测试承诺结果的规范 允诺解决了,但随后,接住,最后处理者似乎从未开火,呼叫完成 因此,规范超时并失败,请参见Chrome开发者控制台的屏幕截图 茉莉花套房和规格 describe("promise suite", function () { var someMethod = function() { var deferred = $q.defer(); setTimeout(function() {
describe("promise suite", function () {
var someMethod = function() {
var deferred = $q.defer();
setTimeout(function() {
console.log('All done calling resolve');
deferred.resolve('all done');
}, 500);
return deferred.promise;
}
iit("promise spec", function (done) {
someMethod()
.then(function(message) {
console.log('promise method resolved, running expectation');
expect(message).toBe('all done');
done();
})
.catch(function(error) {
console.log('promise was rejected ', error);
done();
})
.finally(function() {
console.log('calling done from finally');
done();
});
});
});
$q承诺将在下一个摘要中解决。。。因此,您需要触发摘要:
$rootScope.$digest();
在plunkr中尝试了您的代码,它正在工作,请参阅控制台输出 因为在这个示例中没有要引导的应用程序,所以我使用ng模块来获得$q服务
我在plunker中看到了你的代码,它肯定在工作。在我的测试套件中无法得到相同的结果…在规范底部调用$rootScope.$digest似乎没有效果。你想从那里打电话吗?是的。最后,我确信这就是问题所在。我最近也有同样的问题,这是一个摘要问题。虽然。。。在解决承诺后,即在超时函数中,尝试调用摘要。那也许行。同样,我也不确定,我的计算机上没有开发环境。如果可以,也许可以尝试使用$timeout而不是setTimeout。