0
私は以下のようなテストをしています。基本的には、特定のメソッドが遅延しているかどうかをテストしたい。Sinonの偽のタイマーを使用している間にsetTimeoutがトリガーされない
次の例は、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をラップする場合は、決意が呼び出されることは決してありません:
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
に使用しています。
は、いくつかの変更をしなければならなかったが、これは正しい道に私を導きました!ありがとう:) –
あなたは内側の約束を変更することができなかった場合はどうしますか?ここにclock.tickを置くことはできませんが、setTimeoutが解決するのを待っています。 –
@FélixBrunet 'setTimeout'コールの後ろにクリックティックを置く必要があります。それは「新しい約束」の後にも働くだろう。 – Bergi