ITADN
istanbuljs/babel-plugin-istanbul
istanbuljs/babel-plugin-istanbul · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

babel-plugin-istanbul

Coverage Status Conventional Commits community slack

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-preprocessorkarma-webpackkarma-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 合作,为你用于构建应用程序的开源依赖项提供商业支持和维护。节省时间,降低风险,改善代码健康状况,同时向你实际使用的依赖项的维护者付费。了解更多。