gpt4 book ai didi

javascript - MochaJS setTimeout ES6

转载 作者:行者123 更新时间:2023-11-28 18:56:21 28 4
gpt4 key购买 nike

在对 Node.js 应用进行单元测试时,我在使用 setTimeout 时遇到了 Mocha 和 ES6 问题。

Mocha 说测试通过了,但是当我输入其他内容(检查测试,确保其有效)时,它仍然说它通过了,而它应该失败。

代码:

describe('.checkToken', function () {
let user = {};
let token = repository.newToken();

it('token has expired', co.wrap(function* () {
setTimeout(function* () {
let result = yield repository.checkToken(user, token.token);
result.body.should.have.property("error");
}, 1000)
}));
});
});

其他测试都正常,没有问题。

我已经在 setTimeout 的回调中尝试过箭头函数或标准函数,但它随后在 yield 上崩溃了。 (意外的 token )

checkToken 是一个生成器函数。

使用:

  • Nodejs v4.2.1
  • Co v4.6.0
  • 应该是 v7.1.0
  • Mocha v2.3.3

最佳答案

您不能将 setTimeout 与生成器一起使用。它是您传递给将异步运行的 co.wrap 的生成器,并且需要了解超时。您需要屈服超时(如yieldable,如重击或 promise ):

it('token has expired', co.wrap(function* () {
yield new Promise(resolve => { setTimeout(resolve, 1000); });
let result = yield repository.checkToken(user, token.token);
result.body.should.have.property("error");
}));

关于javascript - MochaJS setTimeout ES6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33582730/

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