Node.js 运行摩卡&x2B;伊斯坦布尔+;巴别塔
我在用摩卡和巴贝尔编译器运行伊斯坦布尔时遇到了一些问题 我的所有测试都运行得很好,但在所有测试完成后,它向我显示以下消息:Node.js 运行摩卡&x2B;伊斯坦布尔+;巴别塔,node.js,mocha.js,babeljs,istanbul,Node.js,Mocha.js,Babeljs,Istanbul,我在用摩卡和巴贝尔编译器运行伊斯坦布尔时遇到了一些问题 我的所有测试都运行得很好,但在所有测试完成后,它向我显示以下消息: 未收集到覆盖范围信息,退出时不写入覆盖范围信息 而且它也没有制作任何报道 Im正在运行的命令是: NODE\u ENV=test伊斯坦布尔cover\u mocha--require babel core/register--recursive 该项目位于github中: 有什么想法吗?使用Babel 6.x,假设我们有文件test/pad.spec.js: import
未收集到覆盖范围信息,退出时不写入覆盖范围信息
而且它也没有制作任何报道
Im正在运行的命令是:
NODE\u ENV=test伊斯坦布尔cover\u mocha--require babel core/register--recursive
该项目位于github中:
有什么想法吗?使用Babel 6.x,假设我们有文件
test/pad.spec.js
:
import pad from '../src/assets/js/helpers/pad';
import assert from 'assert';
describe('pad', () => {
it('should pad a string', () => {
assert.equal(pad('foo', 4), '0foo');
});
});
安装一堆垃圾:
$ npm install babel-istanbul babel-cli babel-preset-es2015 mocha
创建一个.babelrc
:
{
"presets": ["es2015"]
}
运行测试:
$ node_modules/.bin/babel-node node_modules/.bin/babel-istanbul cover \
node_modules/.bin/_mocha -- test/pad.spec.js
pad
✓ should pad a string
1 passing (8ms)
=============================================================================
Writing coverage object [/Volumes/alien/projects/forked/react-flux-puzzle/coverage/coverage.json]
Writing coverage reports at [/Volumes/alien/projects/forked/react-flux-puzzle/coverage]
=============================================================================
=============================== Coverage summary ===============================
Statements : 100% ( 4/4 )
Branches : 66.67% ( 4/6 ), 1 ignored
Functions : 100% ( 1/1 )
Lines : 100% ( 3/3 )
================================================================================
更新:我成功地使用了纽约
(它消费伊斯坦布尔
)而不是伊斯坦布尔
/巴贝尔伊斯坦布尔
。这就不那么复杂了。要尝试它:
安装stuff(您可以删除babel istanbul
和babel cli
):
如上所述创建.babelrc
执行以下命令:
$ node_modules/.bin/nyc --require babel-core/register node_modules/.bin/mocha \
test/pad.spec.js
…这会给你类似的结果。默认情况下,它将覆盖率信息放入.nyc output/
,并在控制台中打印一个漂亮的文本摘要
注意:将命令放置在package.json
的脚本
字段中时,可以从这些命令中删除node\u modules/.bin/
附言:我现在建议用单人咖啡代替摩卡咖啡/instanbul/纽约/柴/等等。
解决方案A:使用和 设置(不要忘记
@next
对于nyc
):
npm安装--保存开发人员纽约巴贝尔插件伊斯坦布尔巴贝尔寄存器
将环境添加到babel
config:
{
"env": {
"nyc": { "plugins": ["istanbul"] }
}
}
{
"reporter" : ["text", "text-summary", "lcov", "html"],
"include" : ["src/**/*.js"],
"require" : ["babel-register"],
"sourceMap" : false,
"instrument" : false,
"all" : true
}
nyc
config:
{
"env": {
"nyc": { "plugins": ["istanbul"] }
}
}
{
"reporter" : ["text", "text-summary", "lcov", "html"],
"include" : ["src/**/*.js"],
"require" : ["babel-register"],
"sourceMap" : false,
"instrument" : false,
"all" : true
}
PS:include
字段需要在package.json的.nycrc
中指定,如果在命令行中指定,覆盖范围将不起作用
运行测试:
$ node_modules/.bin/babel-node node_modules/.bin/babel-istanbul cover \
node_modules/.bin/_mocha -- test/pad.spec.js
pad
✓ should pad a string
1 passing (8ms)
=============================================================================
Writing coverage object [/Volumes/alien/projects/forked/react-flux-puzzle/coverage/coverage.json]
Writing coverage reports at [/Volumes/alien/projects/forked/react-flux-puzzle/coverage]
=============================================================================
=============================== Coverage summary ===============================
Statements : 100% ( 4/4 )
Branches : 66.67% ( 4/6 ), 1 ignored
Functions : 100% ( 1/1 )
Lines : 100% ( 3/3 )
================================================================================
#1。建造
NODE_ENV=nyc babel src--out dir lib
# 2. 新闻报道
纽约摩卡
解决方案B:没有额外的软件包:只有基本的软件包
最近在伊斯坦布尔()上做了一些工作,用sourcemaps支持Babel生成的代码(请参阅和以获取示例)
有两种方法:
- A.针对先前传输的代码编写的测试
- B.针对原始代码编写的测试,并在运行时一起在内存中传输
B1。导出(以前)传输代码的测试
这是分两步完成的:首先,使用babel构建源代码(例如从./src到./out),并根据传输的源代码编写测试(export foo from“/out/foo”
)
然后,您将能够使用以下工具运行测试:
伊斯坦布尔封面_mocha--./测试--compilers js:babel register
现在,如果您希望代码覆盖率遵循您编写的原始代码(而不是传输的代码),请确保使用设置为:
babel./src--out dir./out--source映射两者
注:如果需要,您还可以:
伊斯坦布尔封面_mocha--./测试--compilers js:babel register\
--需要babel polyfill\
--需要应该\
--需要西农
B2。直接导出原始代码的测试 在本例中,您根据原始源代码编写测试(
从“/src/foo”
”导出foo),无需进一步步骤,您就可以直接在cli.js上使用babel节点运行伊斯坦布尔:
babel节点。/node_模块/伊斯坦布尔/lib/cli.js封面_摩卡--./测试
注:如果需要,您还可以:
babel节点。/node_模块/伊斯坦布尔/lib/cli.js封面_摩卡--./测试
--需要babel polyfill\
--需要应该\
--需要西农
截至2016年4月17日,此覆盖率报告内容仍然有点混乱,对于我的React项目,它有.jsx文件和一个帮助文件,覆盖率报告脚本如下所示:
istanbul cover node_modules/mocha/bin/_mocha -- \
--compilers js:babel-core/register \
--require ./test/testhelper.js \
\"test/**/*@(.js|.jsx)\"
因此,这不会太容易伊斯坦布尔的当前版本0.4.3不适用于巴别塔,因此您必须使用实验性的alpha版本:
npm install istanbul@1.0.0-alpha.2 --save-dev
然后您需要.伊斯坦布尔.yml
-文件,以便伊斯坦布尔能够识别具有以下行的.jsx文件:
instrumentation:
root: .
extensions: ['.js', '.jsx']
现在它应该可以工作了。此外,如果您想增加Travis和工作服的承保范围,您应该:
npm i工作服--保存开发人员
.travis.yml
:
script:
- npm --silent test
- cat ./c
coverage/lcov.info | coveralls
现在你可以把这个很酷的徽章放到你的自述中。尼托 我最近遇到了这个问题-你必须遵循grunt istanbul使用的流程,我相信这是…'instrument“,”mochacli“,”storeCoverage“,”makeReport“(虽然grunt istanbul在这个场景中为您做这件事,而您是从命令行做的)-所以我认为您需要先“instrument”您的文件-不完全确定这意味着什么,但当我在另一个目录中插入时,它会重新创建文件,然后我想你用摩卡来处理那些文件-不是100%确定-但肯定是仪器first@weslley-如果你对我的回答感到满意,你能接受吗?Thank.伊斯坦布尔1.0.0-alpha.2现在允许Babel生成代码,请参阅Thank@boneskull:)现在似乎一切正常!在babel更新之后,我对这些新配置感到困惑。@boneskull您必须使用babel节点吗?
$babel伊斯坦布尔封面_mocha--R规范--编译器js:babel核心/寄存器
不够。不适用于我。@cameronjroe最新版本伊斯坦布尔(撰写本文时为v0.4.2)在使用Mocha的--编译器选项时无法为您的测试提供仪器;您必须使用babel节点
。据我所知,伊斯坦布尔v1.0.0不需要babel node
+1来执行nyc
指令。当没有babel istanbul
和相关模块的神奇组合出现时,我就能够做到这一点