Jasmine测试中javascript错误的处理

Jasmine测试中javascript错误的处理,javascript,gruntjs,jasmine,Javascript,Gruntjs,Jasmine,我正在开发一个javascript应用程序,它监听window.onerror()并向我和我的团队正在构建的端点报告。我在使用grunt contrib jasmine进行单元测试方面遇到了一些问题,因为我的测试用例预期会抛出错误 使用phantom运行测试用例时,这会不必要地干扰我的输出: 在引用错误的实例中,我的测试如下所示: it("should report reference errors", function() { spyOn(window.fred, 'sendReque

我正在开发一个javascript应用程序,它监听window.onerror()并向我和我的团队正在构建的端点报告。我在使用grunt contrib jasmine进行单元测试方面遇到了一些问题,因为我的测试用例预期会抛出错误

使用phantom运行测试用例时,这会不必要地干扰我的输出:

在引用错误的实例中,我的测试如下所示:

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(脚本)。Jasmine的
expect(fn).toThrow(e)
如果我在这里使用它,它看起来可以完成任务,但是测试仍然失败。我还尝试用
try{…}catch(err){…}
来包围它,但没有效果


我的问题是,有人对如何处理这个问题有什么建议吗?

通常,jasmine会尝试捕获由您的规范引发的任何异常,并将这些异常标记为失败。但是,由于浏览器在尝试解析脚本标记时引发此异常,因此jasmine不在调用堆栈中。这就是为什么
toThrow
不起作用的原因

此外,只要您的
onerror
方法返回
true
,在这种情况下,浏览器应该登录到控制台