我研究并发现,在摩卡测试承诺时,你必须回复承诺。
我尝试执行以下操作但测试保持超时。这样做的正确方法是什么?
describe('A promise', () => {
it('should not timeout', () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('hi!');
}, 3000);
}).then((msg) => {
expect(msg).to.equal('hi!');
});
});
});
输出:
$ ./node_modules/mocha/bin/mocha test.js
A promise
1) should not timeout
0 passing (2s)
1 failing
1) A promise
should not timeout:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
修改:我尝试在done
行中添加it
并在then
块中调用它但不起作用
答案 0 :(得分:1)
尝试此操作(仅更改:" .timeout(5000)"已添加到"它")。这适合我。基本上你必须更改异步调用的默认超时2秒 - 如果你希望你的异步调用将花费超过2秒。
describe('A promise', () => {
it('should not timeout', () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('hi!');
}, 3000);
}).then((msg) => {
expect(msg).to.equal('hi!');
});
}).timeout(5000);
});
第二个选项(在这种情况下无需更改测试):
./node_modules/mocha/bin/mocha --timeout 5000 test-mocha-spec.js
答案 1 :(得分:0)
这有用吗?
it('should not timeout', done => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('hi!');
}, 1000);
}).then((msg) => {
expect(msg).to.equal('hi!');
done();
});
});
答案 2 :(得分:0)
首先,您需要在回调中添加done参数
it('should not timeout', (done) => {
并在最后调用它,
}).then((msg) => {
expect(msg).to.equal('hi!');
done()
});
答案 3 :(得分:0)
您有3个选项:
在所有这些情况下,您必须设置超时阈值,因为mocha无法确定您是否会解决异步调用。这是对无休止测试的保护。
通常情况下,你需要用一些伪造的价值来伪造你承诺的电话并立即解决一些承诺,这样你就不会有这样的问题。