Jasmine:测试一个setTimeout函数会抛出一个错误

时间:2012-08-29 11:05:17

标签: javascript unit-testing asynchronous settimeout jasmine

我想测试一个方法的错误处理,该方法使用setTimeout进行调度。错误将在计划部分中抛出,即:

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

如何测试是否抛出了错误并且它有正确的消息?

1 个答案:

答案 0 :(得分:7)

您需要在setTimeout中捕获该功能,并使用expect(function(){fn();}).toThrow(e);进行调用。所以你可以窥探setTimeout来获得这个功能:

spyOn(window, 'setTimeout');
sutWithSetTimeout();
var fn = window.setTimeout.mostRecentCall.args[0];
expect(fn).toThrow('pang');