4

setTimeout を使用してスケジュールを設定するメソッドのエラー処理をテストしたいと思います。エラーは、スケジュールされた部分でスローされます。つまり、次のようになります。

function sutWithSetTimeout() {
    setTimeout(function () { throw new Error("pang"); }, 1);
}

エラーがスローされ、正しいメッセージが表示されることをテストするにはどうすればよいですか?

4

1 に答える 1

8

で関数をキャッチし、setTimeoutを使用して呼び出す必要がありますexpect(function(){fn();}).toThrow(e);。したがって、スパイしsetTimeoutて関数を取得できます。

spyOn(window, 'setTimeout');
sutWithSetTimeout();
var fn = window.setTimeout.mostRecentCall.args[0];
expect(fn).toThrow('pang');
于 2012-08-29T15:18:43.070 に答える