PS:我现在推荐使用单个
jest,而不是mocha/instanbul/nyc/chai等。
方案A:使用
nyc和
babel-plugin-istanbul
设置(不要忘记为nyc添加@next):
npm install --save-dev nyc babel-plugin-istanbul babel-register
将一个环境添加到
babel
配置中:
{
"env": {
"nyc": { "plugins": ["istanbul"] }
}
}
"nyc" 配置:
{
"reporter" : ["text", "text-summary", "lcov", "html"],
"include" : ["src/**/*.js"],
"require" : ["babel-register"],
"sourceMap" : false,
"instrument" : false,
"all" : true
}
PS:
include
字段需要在
.nycrc
或
package.json
中指定,如果在命令行中指定,则覆盖率将不起作用。
运行测试:
NODE_ENV=nyc babel src --out-dir lib
nyc mocha
解决方案B:不需要额外的包,只使用基本的包
最近在伊斯坦布尔(
1.0.0-alpha.2)上进行了工作,以支持使用sourcemaps生成的Babel代码(请参见
#212和
this的示例)。
有两种方式:
- A. 对先前转换过的代码编写测试
- B. 编写针对原始代码的测试,并在运行时将所有代码一起转换
B1. 测试导出(之前已经)转译的代码
这需要分两步完成:首先,使用babel构建你的源代码(例如从./src到./out),并针对转译后的源代码编写测试(export foo from "./out/foo";
)。
然后,您将能够使用istanbul 1.0.0-alpha.2 运行测试:
istanbul cover _mocha -- ./test --compilers js:babel-register
如果您想让代码覆盖率跟随您编写的原始代码(而不是转换后的代码),请确保使用
babel source-maps options 设置为
both 进行构建:
babel ./src --out-dir ./out --source-maps both
PS:如果需要,您也可以执行以下操作:
istanbul cover _mocha -- ./test --compilers js:babel-register \
--require babel-polyfill \
--require should \
--require sinon
B2. 直接导出原始代码的测试
在这种情况下,您会针对原始源代码(export foo from "./src/foo";
)编写测试,并且不需要进一步的步骤,您可以直接使用babel-node运行istanbul 1.0.0-alpha.2来执行cli.js:
babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test
PS:如果需要,您还可以执行以下操作:
babel-node ./node_modules/istanbul/lib/cli.js cover _mocha -- ./test
--require babel-polyfill \
--require should \
--require sinon