Karma Istanbul 修复以与 Chrome 的新版本一起使用

Karma Istanbul fix to work with new version of Chrome

在我的 AngularJs 应用程序中,我使用 Jasmine 和 Karma 进行单元测试。

最近,在 chrome 更新后(现在在 72.0.3626.81 上)我的单元测试在本地开始失败(没有更改代码)。我认为错误是我的覆盖工具 Instanbul 造成的。

有时会出现这样的错误:

afterAll Uncaught ReferenceError: __cov_iuQO6FdumXRPLjSMopb0JQ is not defined 抛出错误

其他时候它会出现在特定的单元测试中(不知道为什么)。

我搜索了我的应用程序,这个 __cov_ 变量可能来自的唯一文件是 Instanbul 包中函数的 return,instrumenter.js 中的 generateTrackerVar()

由于没有进行任何代码更改,我认为问题出在 Chrome 的新版本上,可能是安全设置。

我的问题是 karama-coverage/istanbul 需要什么权限?或者,如果有人怀疑问题不是基于安全的,那么可能是什么导致了这个错误?

谢谢

编辑: 我试过像这样在我的 gulpfile 中禁用网络安全:

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

但这并没有解决问题。有没有办法在此配置中设置 chrome 版本?

我设法通过在 __cov_ 与抛出错误的测试文件相关之后找出哈希码来解决这个问题。我不知道为什么错误没有像往常一样出现,那将是另一个需要解决的问题。

现在我设法通过在 instanbul 包中登录 instrumenter.js 来找出文件。然后通过删除我的覆盖工具,我找出了问题的根源。简单地删除覆盖工具会给我一个不同的错误,但不会告诉我哪个文件,所以我需要同时执行这两个操作。