定期的なタスクを実行するために setTimeout に依存するJavaScriptコードをテストする必要があります。 Mochaテストから時間の経過をシミュレートして、setTimeoutコールバックが呼び出されるようにするにはどうすればよいですか?
私は基本的に Jasmineのモッククロック に類似した機能を求めています。
Fake Timers のドキュメントに記載されているように、Sinon.JSがsinon.useFakeTimersを介してJavaScriptクロックの操作をサポートしていることがわかりました。私は既にモック目的でSinonを使用しているのでこれは完璧です。モカライブラリはモックライブラリの領域にあるため、Mocha自体がこれをサポートしていないのは理にかなっていると思います。
以下は、Mocha/Chai/Sinonを使用した例です。
var clock;
beforeEach(function () {
clock = sinon.useFakeTimers();
});
afterEach(function () {
clock.restore();
});
it("should time out after 500 ms", function() {
var timedOut = false;
setTimeout(function () {
timedOut = true;
}, 500);
timedOut.should.be.false;
clock.tick(510);
timedOut.should.be.true;
});