由跨域AJAX引起的Karma和Jasmine的错误

时间:2013-08-05 19:32:15

标签: javascript ajax xss jasmine karma-runner

我正在设置使用Jasmine和Karma来测试我的JavaScript的测试。 Karma在Node.js中运行并启动Chrome浏览器。

我一直得到并且错误“Chrome 28.0(Windows)错误脚本错误。在:0”在跟踪事物时,我意识到我在代码中创建的一些对象会产生AJAX跨域AJAX调用,当他们这样做时我的卡玛测试崩溃。

我不需要这些AJAX调用来成功让我的测试成功,但是我希望它们不会导致我的Karma测试失败。

我愿意以各种方式解决这个问题。我可以更改我的Karma / Chrome设置,以便AJAX不会灾难性地失败吗?我可以覆盖XMLHttpRequest,以便不会发出违规请求或者没有发出请求吗?

注意: 即使它也在进行跨域AJAX请求,测试也不会在调试窗口中失败。

我使用的是一个覆盖jQuery AJAX的测试库。但是,我还有另一个仍在发出AJAX请求的库。

2 个答案:

答案 0 :(得分:5)

我在使用CORS和AJAX时遇到了类似的问题,然后我遵循了jhamm的建议。然后,我得到了#34;错误[启动器]:无法启动chrome_without_security无法找到二进制文件chrome_without_security"。

由于我的问题是CORS,我发现here我应该将新的浏览器类型添加到karma.conf.js上的浏览器列表中。

我这样添加:

browsers: ['Chrome_without_security'],
customLaunchers:{
    Chrome_without_security:{
        base: 'Chrome',
        flags: ['--disable-web-security']
    }
}

之后,因为我只有这一个浏览器,所以我不必使用

karma start --browsers Chrome_without_security

我可以输入

karma start

它会在没有安全性的情况下要求HeadlessChrome,这意味着它不会发现CORS有任何问题。

答案 1 :(得分:1)

如果它确实是一个CORS问题,您可以通过启动这样的业力来禁用跨域:

karma start --browsers chrome_without_security

Chrome可以在禁用安全性的情况下启动

open -a Google\ Chrome --args --disable-web-security

Karma团队正好利用它。