gpt4 book ai didi

javascript - 如何使用 await 使用 mocha 测试异步代码

转载 作者:行者123 更新时间:2023-12-04 10:22:52 25 4
gpt4 key购买 nike

如何使用 mocha 测试异步代码?我想使用多个 await在 Mocha 里面

var assert = require('assert');

async function callAsync1() {
// async stuff
}

async function callAsync2() {
return true;
}

describe('test', function () {
it('should resolve', async (done) => {
await callAsync1();
let res = await callAsync2();
assert.equal(res, true);
done();
});
});

这会产生以下错误:
  1) test
should resolve:
Error: Resolution method is overspecified. Specify a callback *or* return a Promise; not both.
at Context.it (test.js:8:4)

如果我删除 done() 我得到:
  1) test
should resolve:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/tmp/test/test.js)

最佳答案

Mocha supports Promises out-of-the-box ;你只需要return Promiseit()的回调。
如果 Promise 解决,则测试通过。
相反,如果 Promise 拒绝,则测试失败。就如此容易。
现在,自从 async functions always implicitly return a Promise 你可以这样做:

async function getFoo() {
return 'foo'
}

describe('#getFoo', () => {
it('resolves with foo', () => {
return getFoo().then(result => {
assert.equal(result, 'foo')
})
})
})
你不需要 done也不是 async为您的 it .
但是,如果你仍然坚持使用 async/await :
async function getFoo() {
return 'foo'
}

describe('#getFoo', () => {
it('returns foo', async () => {
const result = await getFoo()
assert.equal(result, 'foo')
})
})
无论哪种情况, 不要声明 done作为论据
如果您使用上述任何一种方法,您需要删除 done完全来自您的代码。路过 done作为 it() 的参数向 Mocha 暗示您打算最终调用它。
同时使用 Promises 和 done将导致:

Error: Resolution method is overspecified. Specify a callback or return a Promise; not both

done方法仅用于测试基于回调或基于事件的代码。如果您正在测试基于 Promise 或 async/await 的函数,则不应使用它。

关于javascript - 如何使用 await 使用 mocha 测试异步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52641469/

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