Karma Istanbul 修复程序可与新版本的 Chrome 一起使用

Posted

技术标签:

【中文标题】Karma Istanbul 修复程序可与新版本的 Chrome 一起使用【英文标题】:Karma Istanbul fix to work with new version of Chrome 【发布时间】:2019-07-15 04:37:36 【问题描述】:

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

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

有时会出现这样的错误:

在 afterAll Uncaught ReferenceError: __cov_iuQO6FdumXRPLjSMopb0JQ is not defined 中抛出了一个错误

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

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

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

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

谢谢

编辑: 我试图在我的 gulpfile 中禁用网络安全,如下所示:

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Karma Istanbul 修复程序可与新版本的 Chrome 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Sourcemap + istanbul/isparta 代码覆盖 webpack + babel (for es6) + mocha (+karma)

使用 karma-jasmine 和 istanbul 的 Typescript 代码覆盖率

使用 karma-jasmine 和 istanbul 的 Typescript 代码覆盖率

将来自 karma-coverage 的 istanbul 测试覆盖率与来自其他来源的覆盖率合并

使用 Istanbul + Webpack 覆盖 JSX 文件的代码

Win10升级后回退后无法检测新版本的修复办法