编程语言
首页 > 编程语言> > javascript-使用茉莉花进行单元测试window.onerror

javascript-使用茉莉花进行单元测试window.onerror

作者:互联网

我对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而不是对其进行测试.
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,但不会造成麻烦.有人知道更好的方法吗?

解决方法:

没有茉莉花的知识.

所有单元测试都在try / catch块中运行,因此,如果一个测试死亡,则可以运行下一个测试(至少对于QUnit是True).而且由于window.onerror不会捕获在try / catch中已经捕获的异常,因此在单元测试中测试它时将不会运行.

尝试根据异常手动调用onerror函数.

try {
    //Code that should fail here.
    someUndefinedFunction();
} catch (e) {
    window.onerror.call(window, e.toString(), document.location.toString(), 2);
}

expect(globalerror.windowHandleError).toHaveBeenCalled();

这远非完美,因为document.location与url参数不同,并且您需要手动设置行号.更好的方法是解析e.stack以获取正确的文件和行号.

在单元测试中调用这样的函数时,最好是简单地测试您的函数是否已设置以及在使用所有伪造的参数调用时函数是否正常运行,这是一个更好的主意.

标签:jasmine,error-handling,javascript
来源: https://codeday.me/bug/20191201/2080316.html