【发布时间】:2019-04-19 12:00:15
【问题描述】:
下面是测试代码:
function timeout(): Promise<NodeJS.Timeout> {
return new Promise(resolve => setTimeout(resolve, 0));
}
async function router(publish: Publish): Promise<void> => {
await timeout();
publish('requestObject');
};
这是我的测试。如果我使用下面的 try/catch,它会立即失败并显示正确的错误。
it.only('returns a valid response', (done) => {
const publish = sinon.stub();
publish.callsFake((publishResponse) => {
try {
expect(publishResponse).to.equal('wrong');
done();
} catch (error) {
done(error);
}
});
router(publish);
sinon.restore();
});
如果我删除 try/catch 测试超时:
publish.callsFake((publishResponse) => {
expect(publishResponse).to.equal('wrong');
done();
});
错误:超过 5000 毫秒的超时。对于异步测试和钩子,确保 “完成()”被调用;如果返回一个 Promise,请确保它解析。
我猜 promise 没有解决,因为 expect 失败了。所以它没有达到done()。有没有办法让我更干净地重写它?还是使用 try/catch 编写此测试的适当方式?
我阅读了several SO answers 的类似问题,他们说要确保被测代码不会吞下错误。但在我的代码中,我没有看到任何吞下错误的代码。
【问题讨论】:
标签: typescript async-await sinon