2013-11-22 88 views
2

我正在开发一个JavaScript应用程序,它侦听window.onerror()并向端点报告我和我的团队正在构建。我正在使用grunt-contrib-jasmine进行单元测试,因为我的测试用例期望错误被抛出,所以我遇到了问题。在Jasmine测试中处理javascript错误

当运行测试用例幻象,这个杂波我的输出不必要的:http://cl.ly/image/1n3k3z2g2V2l

在引用错误的情况下,我的测试是这样的:

it("should report reference errors", function() { 
    spyOn(window.fred, 'sendRequest').andCallFake(function(details) { 
     expect(details.type).toEqual('js-error'); 
     expect(details.message).toBeNonEmptyString(); 
    }); 
    runs(function() { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.innerHTML = 'reference_error;'; 
     document.body.appendChild(script); 
    }); 

    waits(2000); 

    runs(function() { 
     expect(window.fred.sendRequest).toHaveBeenCalled(); 
    }); 
}); 

我希望能够到处理在代码中某处引发的ReferenceError。尽我所见,这发生在document.body.appendChild(script);间接。茉莉花的expect(fn).toThrow(e)看起来像它会做的工作,如果我在这里使用它,但测试仍然失败。我也试过围绕它与try { ... } catch (err) { ... }但无济于事。

我的问题,没有人有任何建议如何处理这个?

回答

0

通常茉莉花会尝试捕捉由您的规格抛出的任何异常,并将这些异常标记为失败。但是,因为浏览器在尝试解析脚本标记时抛出了此异常,所以jasmine不在调用堆栈中。这就是为什么toThrow不起作用。

此外,只要您的onerror方法返回true浏览器应该not do it's default error action,在这种情况下登录到控制台。