node.js中Mocha的代码覆盖率
简介 我已经安装了jscoverage,并设置了make命令来生成appcov的覆盖率数据并运行测试 对于这个项目,我使用的是:node.js、mongoose、express、mocha和should 相关文件: 生成文件: index.js: test/models/location.test.js: app/run.js: 问题 输出node.js中Mocha的代码覆盖率,node.js,express,mocha.js,Node.js,Express,Mocha.js,简介 我已经安装了jscoverage,并设置了make命令来生成appcov的覆盖率数据并运行测试 对于这个项目,我使用的是:node.js、mongoose、express、mocha和should 相关文件: 生成文件: index.js: test/models/location.test.js: app/run.js: 问题 输出coverage.html文件概述为空。概述中有0%0个SLOC 0文件 我的假设是,摩卡没有识别或加载app cov的覆盖范围。我只为location模型编
coverage.html
文件概述为空。概述中有0%0个SLOC 0文件
我的假设是,摩卡没有识别或加载app cov的覆盖范围。我只为location模型编写了一个单元测试。这是我在测试中要求文件的方式吗
我已经习惯了phpunit及其配置,所以在组装测试套件时遇到了一些问题
向任何可以推荐解决方案或如何整理我的ugle代码的人推荐Ups:)您的makefile有许多问题 1-为什么需要TESTS变量?您的测试位于test/子目录中,因此,除非您有其他.js文件(为什么要?),否则这是mocha的默认设置:“默认情况下,mocha(1)将使用模式./test/*.js,因此它通常是放置测试的好地方。” 2-您的
test:
和test-cov:
条目都将EXPRESS\u-cov环境变量设置为1,这意味着您无法在没有覆盖选项的情况下运行测试(也就是说,无法使用makefile)。如果您总是希望使用覆盖率进行测试,这可能很好,但是为什么有两个条目呢?请看下面的示例。如果遵循此示例,则您的测试:
条目不应设置EXPRESS\u COV
3-您的gen cov条目是错误的,实际上应该根据存储插入指令的文件的子目录的名称将其命名为app cov:
。顺便问一下,为什么不选择标准的“lib-cov”(对于未插入指令的js文件,选择“lib”)?当然不需要,但这是社会上许多人遵循的惯例
4-为什么在运行jscoverage之前删除插入指令的文件?不确定它是否会导致make出现问题,不要这样认为,但它是无用的,应该被删除
5-test cov现在应该依赖于app cov(这可能是问题的核心,因为依赖关系不存在,所以请确保从未检测到该依赖关系已过时!)。test cov确实应该设置EXPRESS_cov=1环境变量
6-在test cov中,coverage.html中的“l”似乎位于单独的一行,尽管它可能是pastebin
总结一下(我保留了app和app-cov,不过我建议使用lib和lib-cov):
编辑:我刚刚注意到,在您的测试代码中,
在/app/文件夹中显式地要求一个模型。您必须像在索引文件中一样使用EXPRESS_COV变量。我正在将silex应用程序重构为node.js项目,我维护了约定。mocha不会递归地读取我的测试,这是测试变量的原因。冗余的EXPRESS_COV是我在发布之前用来调试问题的东西。我只是简单地遵循了教程中的makefile语义。布线似乎不是问题所在,您指出的任何东西都不会被实现破坏,只是语义。我同意我误解了测试引导中的一个关键点,即要分析的覆盖率,如果你能发现它会更有帮助的话。#3不是语义,而是make的工作方式。我指出了您代码中的许多问题,我无法神奇地知道它是用于调试的,我分析了发布的内容。“我的编辑”会告诉您为什么看不到覆盖率,因为这是您唯一的测试,它会从应用程序(而不是应用程序cov)显式加载。即使这样,您也要测试属性是否存在,这取决于模型的实现,这可能不包括任何代码。如果您在模型上调用一个方法,那么它将测试某些内容。从发布的makefile中,运行make gen cov
将达到预期效果。我不理解你的误解。gen cov不是目录,而是目标。在那个例子中,我只是没有把它设置为假的。我有一个非常贫乏的模型,根据设计,没有复杂的域操作。这只是一个轻量级的数据存储,所以测试属性可能是我单元测试的重点。毕竟,如果模型是由mongoose架构的,那么实例化模型并测试预期属性是有意义的。所以我想你是说我的测试应该通过mongoose或其他加载程序加载模型,而不是使用文件路径,因为模型不是从app-cov加载的。看起来不错,从mongoose加载并包含index.js,我有代码覆盖率的输出。感谢您指出这一点。make命令执行起来没有问题,忽略dual EXPRESS_COV=1,它们是放在那里调试的。
REPORTER = dot
test:
@NODE_ENV=test ./node_modules/.bin/mocha -b \
--reporter $(REPORTER)
app-cov:
jscoverage app app-cov
test-cov: app-cov
@EXPRESS_COV=1 $(MAKE) test REPORTER=html-cov > docs/report/coverage.html
.PHONY: test