javascript - 用 jasmine 单元测试 window.onerror

标签 javascript error-handling jasmine

我是 javascript 的新手,正在尝试使用 jasmine 对一些错误处理代码进行单元测试。

特别是,我正在尝试编写一些测试来验证替换 window.onerror() 的自定义代码(称为 windowHandleError)是否被调用,并且正在执行我们想要的操作。

我尝试了一些类似的方法:

       it("testing window.onerror", function() {
        spyOn(globalerror, 'windowHandleError');
        globalerror.install();

        var someFunction = function() {
            undefinedFunction();
        };
        expect(function() {someFunction();}).toThrow();
        expect(globalerror.windowHandleError).toHaveBeenCalled();
    });

但它不会触发 onerror。我看过一些相关的问题,但他们似乎询问特定的浏览器,或者如何/在哪里使用 onerror 而不是如何测试它。
window.onerror not firing in Firefox
Capturing JavaScript error in Selenium
window.onerror does not work
How to trigger script.onerror in Internet Explorer?

根据其中一些人的说法,我认为在调试器中运行规范测试会强制触发 onerror,但不是。有人知道更好的方法吗?

最佳答案

本人最近开发小JavaScript error handler单元测试基于 Buster.JS这与 Jasmine 类似。

The test that exercises the window.onerror看起来像这样:

  "error within the system": function (done) {

    setTimeout(function() {
      // throw some real-life exception
      not_defined.not_defined();
    }, 10);

    setTimeout(function() {
      assert.isTrue($.post.called);
      done();
    }, 100);
  }

它在 setTimeout 回调中抛出一个现实生活中的错误,它不会停止测试执行,并将检查是否在另一个 setTimeout 中的 100 毫秒后调用了一个 spy ,然后调用 done() 这就是如何您使用 Buster.JS 测试异步功能。 The same approach is available with Jasmine通过在异步测试中使用 done()

关于javascript - 用 jasmine 单元测试 window.onerror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10453006/

相关文章:

javascript - javascript 上的注释结构是什么?

javascript - 调用数组原型(prototype)函数

amazon-web-services - AWS-ELB错误页面重定向到其他域

javascript - Ajax POST错误(400错误请求)

r - R中与调查设计相关的问题

java - 撇号 chop 输入字段中的值

javascript - Jasmine 测试 .load() 以获取调用的 URL

angularjs - Protractor 使用 jasmine-reporters 测试报告

Angular Testing 可观察量

javascript - react : using state in a passed callback function to a class constructor doesnt use latest version of state