babel-plugin-istanbul
Having problems? want to contribute? join our community slack.
一个使用 Istanbul 覆盖率对你的代码进行插桩的 Babel 插件。 它可以立即与 karma-coverage 和 Node.js 上的 mocha(通过 nyc)一起使用。
注意: 此插件不会生成任何报告,也不会将任何数据保存到任何文件; 它只是向你的 JavaScript 源代码中添加插桩代码。 要与测试工具集成,请参阅 Integrations 部分。
用法
安装它:
npm install --save-dev babel-plugin-istanbul
将其以测试模式添加到 .babelrc:
{
"env": {
"test": {
"plugins": [ "istanbul" ]
}
}
}
可选地,使用 cross-env 来设置
NODE_ENV=test:
{
"scripts": {
"test": "cross-env NODE_ENV=test nyc --reporter=lcov --reporter=text mocha test/*.js"
}
}
集成
karma
它与 Karma 开箱即用。首先,确保代码已经通过 Babel 转译(使用 karma-babel-preprocessor、karma-webpack 或 karma-browserify)。然后,只需按照文档配置 karma-coverage,但 不要添加 coverage 预处理器。该插件已经对你的代码进行了插桩,Karma 应该会自动识别。
它已在 bemusic/bemuse 项目中进行了测试,该项目包含约 2400 条语句。
mocha on node.js (through nyc)
配置 Mocha 使用 Babel 转译 JavaScript 代码,然后你可以使用 nyc 运行测试,它将收集所有覆盖率报告。
babel-plugin-istanbul 会遵循 nyc 的 include/exclude 配置选项,
但你还需要 配置 NYC 不要对你的代码进行插桩,方法是在你的 package.json 中添加以下设置:
"nyc": {
"sourceMap": false,
"instrument": false
},
忽略文件
你不想覆盖你的测试文件,因为这会扭曲你的覆盖率结果。你可以通过提供与 nyc 的 exclude/include 规则 匹配的插件选项来配置此项:
{
"env": {
"test": {
"plugins": [
["istanbul", {
"exclude": [
"**/*.spec.js"
]
}]
]
}
}
}
如果未在 Babel 配置中提供选项,该插件将在 package.json 中的 "nyc" 键下查找 exclude/include 配置。
您还可以使用 istanbul 的忽略提示 来指定要跳过插桩的特定代码行。
Source Maps
默认情况下,此插件会拾取内联 source map 并将其附加到插桩后的代码中,以便代码覆盖率可以重新映射回原始源代码,即使对于多步骤构建过程也是如此。这可能非常消耗内存。设置 useInlineSourceMaps 以防止此行为。
{
"env": {
"test": {
"plugins": [
["istanbul", {
"useInlineSourceMaps": false
}]
]
}
}
}
如果你正在以编程方式对代码进行插桩,你可以显式地传递一个 source map。
import babelPluginIstanbul from 'babel-plugin-istanbul';
function instrument(sourceCode, sourceMap, filename) {
return babel.transform(sourceCode, {
filename,
plugins: [
[babelPluginIstanbul, {
inputSourceMap: sourceMap
}]
]
})
}
致谢
babel-plugin-istanbul 中采用的方法受到 Thai Pangsakulyanont 的原始库 babel-plugin-__coverage__ 的启发。
babel-plugin-istanbul 企业版
作为 Tidelift 订阅的一部分提供。
babel-plugin-istanbul 的维护者以及数千个其他包的维护者正在与 Tidelift 合作,为你用于构建应用程序的开源依赖项提供商业支持和维护。节省时间,降低风险,改善代码健康状况,同时向你实际使用的依赖项的维护者付费。了解更多。