gpt4 book ai didi

javascript - 在 AngularJS 中测试 Promise 而不是回调

转载 作者:行者123 更新时间:2023-12-03 12:02:44 25 4
gpt4 key购买 nike

我正在学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com