处理 mochajs 超时的更好方法
Better way to handle mochajs timeout
我正在尝试实施 mocha 测试,但它似乎没有按我预期的方式工作。我的代码如下所示:
async function getFoo() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved')
}, 2500)
})
}
describe(`Testing stuff`, function () {
it('resolves with foo', () => {
return getFoo().then(result => {
assert.equal(result, 'foo')
})
})
})
错误信息:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
对我来说,我似乎必须增加超时阈值。
有一个更好的方法吗?因为我不知道每次测试可能需要多长时间。我正在测试 nodejs 子进程
此致
如错误中所述,您需要使用 done()
结束测试。
function delay(timeout = 2500) {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved')
}, timeout)
})
}
describe(`Testing stuff`, function (done) {
it('resolves with foo', (done) => {
return delay().then(result => {
assert.equal(result, 'foo')
done()
})
})
});
// better readability
describe(`Testing stuff`, function (done) {
it('resolves with foo', (done) => {
const result = await delay();
assert.equal(result, 'foo')
done();
})
});
但是正如您所描述的,您正在测试 child_processes 我不推荐这样做。因为要测试 child_process 你需要 promisify
child_process 这没有意义。在这里查看更多信息
如果你真的想测试 child_process 也许你可以用我给的 link 模拟这个过程,但仅用于测试目的。
我正在尝试实施 mocha 测试,但它似乎没有按我预期的方式工作。我的代码如下所示:
async function getFoo() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved')
}, 2500)
})
}
describe(`Testing stuff`, function () {
it('resolves with foo', () => {
return getFoo().then(result => {
assert.equal(result, 'foo')
})
})
})
错误信息:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
对我来说,我似乎必须增加超时阈值。 有一个更好的方法吗?因为我不知道每次测试可能需要多长时间。我正在测试 nodejs 子进程
此致
如错误中所述,您需要使用 done()
结束测试。
function delay(timeout = 2500) {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved')
}, timeout)
})
}
describe(`Testing stuff`, function (done) {
it('resolves with foo', (done) => {
return delay().then(result => {
assert.equal(result, 'foo')
done()
})
})
});
// better readability
describe(`Testing stuff`, function (done) {
it('resolves with foo', (done) => {
const result = await delay();
assert.equal(result, 'foo')
done();
})
});
但是正如您所描述的,您正在测试 child_processes 我不推荐这样做。因为要测试 child_process 你需要 promisify
child_process 这没有意义。在这里查看更多信息
如果你真的想测试 child_process 也许你可以用我给的 link 模拟这个过程,但仅用于测试目的。