gpt4 book ai didi

javascript - 外部 promise 永远不会在 ngMock 的单元测试中完成

转载 作者:行者123 更新时间:2023-12-03 16:33:51 26 4
gpt4 key购买 nike

我正在尝试对外部 promise 的解决/拒绝进行单元测试。

问题是当注入(inject) ngMock 模块时,这些 promise 永远不会完成 - 这是强制性的,因为我正在触发 HTTP 请求和超时。

angular-pouchdb为例,这是我项目的依赖项。从 v2.0.0 开始,因为 PouchDB promises are used ,测试不再完成注入(inject) ngMock 时

示例代码,改编自 angular-pouchdb tests :

var scope;
beforeEach(function() {
var $injector = angular.injector(['ng', 'ngMock', 'pouchdb']);
var pouchDB = $injector.get('pouchDB');
scope = $injector.get('$rootScope');
db = pouchDB('db');
});

it('should wrap destroy', function(done) {
db.destroy()
.then(shouldBeOK)
.catch(shouldNotBeCalled)
.finally(done);

// No matter what's used ($apply, $applySync, $timeout.flush, etc) -- the tests will never finish.
scope.$apply();
});

上述测试的日志如下:

C:\Users\Gustavo\Projetos\main\angular-pouchdb (master)
λ karma start
INFO [karma]: Karma v0.12.37 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.8 (Windows 8 0.0.0)]: Connected on socket s1A7jIzmtcOxkGCtzYke with id 42899233
PhantomJS 1.9.8 (Windows 8 0.0.0) Angular-aware PouchDB public API should wrap destroy FAILED
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

所以,我的问题归结为:我在单元测试 Angular 中遗漏了什么吗?还是 ngMock 的内部错误?

<子> This issue has been created in the angular-pouchdb repository as well .

最佳答案

编辑 8/25:所以我们实际上已经解决了这个问题,但我仍在调查导致它的原因。几天后我会写一篇更新的文章。

好吧,在我几天的业余时间遇到这个问题之后,我已经将这个问题缩小到 pouchDB 的第 3 方 promise 中的某种异常失败,它遇到了 10 秒的超时并且没有抛出干净的返回错误。我可以通过更新我的

jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;

如果我返回并调整自定义构建并登录到 pouchDB,我可以确认那里没有正确返回 promise ,我已经能够在 3.6 和 4.0 pouchDB 中复制它。从我围绕调用的包装控制台日志中,包装调用没有任何结果。在测试 3 附近,我遇到了未捕获的 409 错误,所以很明显 pouchDB 中有一些地方没有被正确处理。

Error Logs

这是一个没有打开 ngMock 的例子,所以你可以看到没有它能走多远。

Without ngMock

关于javascript - 外部 promise 永远不会在 ngMock 的单元测试中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051825/

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