我正在学习 AngularJS。我正在尝试了解包括 promise 在内的各种概念。通常,我会使用回调。现在我正在尝试使用 promise ,我正在尝试弄清楚如何在这个新世界中编写测试。此时,我有:
describe('myModule', function() {
beforeEach(function() {
module('myModule');
});
describe('myService', function () {
var myService = null;
beforeEach(inject(function (myService) {
myService = myService;
}));
it('should do my bidding', function () {
myService.myFunction().then(
function() { expect(true).toBe(true); },
function() { expect(false).toBe(false); }
);
});
});
});
myService 看起来像这样:
myApp.factory('myService', ['$q', function($q) {
return {
myFunction: function() {
var defer = $q.defer();
defer.resolve();
return defer.promise;
}
};
}]);
本质上,此服务总是可以解决。但是,我不能让我的测试失败。即使我将第一个 expect
更改为 false
。我看到一条日志条目显示:
log: Spec 'myModule myService should do my bidding' has no expectations.
就像then
中的断言没有执行。我有什么误解吗?
谢谢
最佳答案
要测试异步代码,您必须在 it
函数中接受 done
参数,并在测试真正完成时调用它。
您还必须调用 $rootScope.$digest()
来调用 then
回调。
因此,测试至少应该是这样的:
it('should do my bidding', function(done) {
myService.myFunction().then(
function() { expect(true).toBe(true); },
function() { expect(false).toBe(false); }
).finally(function() {
done();
});
$rootScope.$digest();
});
Plunker 示例: http://plnkr.co/edit/h68W1IEpAqe6kJwEG6in?p=preview
关于javascript - 在 AngularJS 中测试 Promise 而不是回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25341026/