3

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

我不断收到错误“Chrome 28.0 (Windows) ERROR Script error. at :0” 在跟踪事情后,我意识到我在代码中创建的一些对象会进行 AJAX 跨域 AJAX 调用,当他们这样做时,我的 Karma 测试碰撞。

我不需要这些 AJAX 调用来让我的测试成功,但是我希望它们不会使我的 Karma 测试崩溃。

我愿意以多种方式解决这个问题。我可以更改我的 Karma/Chrome 设置以使 AJAX 不会发生灾难性故障吗?我可以覆盖 XMLHttpRequest 以便不发出违规请求或不发出请求吗?

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

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

4

2 回答 2

5

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

由于我的问题与 CORS 有关,因此我发现应该将新的浏览器类型添加到 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 有任何问题。

于 2018-03-02T20:11:39.667 回答
2

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

karma start --browsers chrome_without_security

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

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

而 Karma 团队正好利用了它。

于 2013-08-07T10:12:41.520 回答