我的测试类似于下面显示的测试。基本上我想测试特定方法是否会延迟。
以下示例按预期工作,即调用resolve方法并且测试通过:
it(`should delay execution by 1 second`, function () {
const clock = sandbox.useFakeTimers();
const p = new Promise(function (resolve) {
setTimeout(resolve, 1000);
});
clock.tick(1000);
return p;
});
但是,如果我将setTimeout包装在另一个Promise中,则决不会调用该解析:
it(`should delay execution by 1 second`, function () {
const clock = sandbox.useFakeTimers();
const p = Promise.resolve()
.then(() => {
return new Promise(function (resolve) {
setTimeout(resolve, 1000); // resolve never gets called
});
});
clock.tick(1000);
return p;
});
这里有什么问题?
我在Sinon 2.1.0
上使用Node 6.9.5
和原生承诺。
答案 0 :(得分:11)
问题似乎是你在超时开始之前勾选时钟 - 这是在你的第二个片段中的一个回应中异步发生的。
这应该有效:
it(`should delay execution by 1 second`, function () {
const clock = sandbox.useFakeTimers();
return Promise.resolve().then(() => {
return new Promise(function (resolve) {
setTimeout(resolve, 1000); // resolve never gets called
clock.tick(1000);
});
});
});