使用 ES6+ 在 Karma 中使用 Istanbul 设置 Browserify

Setting up Browserify with Istanbul in Karma with ES6+

我正在尝试使用 Karma 运行 测试 具有准确的代码覆盖率输出 我的文件使用 ES6+ 包括 ES7 async/await 语法。

只有一个源文件:有效

作为开始,当我只有 一个源文件 时(即我的源文件中没有 require 调用),我设法让它工作。我只是告诉 Karma 在其上使用 babel 并在我的 .babelrc.

上配置 babel-plugin-istanbul

使用 require() 的多个源文件:无效

现在我想让这个在我的真实情况下工作,这是很多源文件,一个到另一个的调用 require() 。为了完成这项工作,我不得不使用 browserify 预处理器,而不是简单地使用 babel 预处理器,但现在它似乎忽略了我的 .babelrc 并且没有使用 istanbul 覆盖率检测代码东西:

我该如何解决这个问题?


此问题的存储库可在 GitHub

上找到

由于发生了很多事情,我决定创建一个 GitHub 存储库,以便任何人都可以立即轻松地重现我的情况:

OP在这里。我想通了:

npm install browserify-istanbul

将此添加到 karma.conf.js:

browserify: {
    configure: function(bundle) {
        bundle.transform(require('browserify-istanbul')({
            ignore: ['test/*.js']
        }));
    }
}

保留 preprocessors 原样(没有 coverage 预处理器!)

preprocessors: {
    "test/*.js": [ "browserify" ],
    "lib/*.js": [ "browserify" ]
}

就是这样。你可以去掉 .babelrcbabel-plugin-istanbul,它们甚至不是必需的。