javascript - Jasmine:测试 setTimeout 函数抛出错误

标签 javascript unit-testing asynchronous settimeout jasmine

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

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

我如何测试是否抛出错误以及它是否包含正确的消息?

最佳答案

您需要在 setTimeout 中捕获函数并使用 expect(function(){fn();}).toThrow(e); 调用它们。所以你可以监视 setTimeout 来获取函数:

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

关于javascript - Jasmine:测试 setTimeout 函数抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176499/

相关文章:

javascript - JavaScript 方法中 GrailsElements 的编码

javascript - 带有 ng-if 条件的嵌套 ng-repeat 用于跳过嵌套数组

ruby - Rspec 包括匹配器、Hash 和 String 对象

javascript - NodeJS 等待异步函数完成 foreach

asynchronous - 如何从异步函数设置全局变量

javascript - 使用 Jquery 删除选择器 CSS

javascript - HighCharts 漏斗带有居中标签而不是右侧标签

android - 如何使用 Mockito 在单元测试中调用 AppCompatActivity onCreate

javascript - 在 Brunch.io 中,我们如何运行测试

c++ - Boost Asio connect_async 从不调用处理程序