我有一个测试承诺结果的规范。
承诺会解决,但then
,catch
和finally
处理程序似乎永远不会触发,并调用done();
因此,规范超时并失败(请参阅Chrome Developer Console的屏幕截图)。
Jasmine套件和规范
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();
});
});
});
答案 0 :(得分:0)
$ q promises在下一个摘要中得到解决...所以你需要触发一个摘要:
$rootScope.$digest();
答案 1 :(得分:0)
尝试使用plunkr中的代码并且它正常工作,请参阅控制台输出。
由于示例中没有应用程序引导程序我使用https://docs.angularjs.org/api/ng/function/angular.injector ng
模块来获取$q
服务