简介
我安装了jscoverage并设置了make命令来生成app-cov的覆盖数据并运行测试。
对于我正在使用的这个项目:node.js,mongoose,express,mocha和should。
相关文件:
Makefile:http://pastie.org/3529374
index.js:http://pastie.org/3529377
test / models / location.test.js:http://pastie.org/3529401
app / run.js:http://pastie.org/3529523
问题
输出coverage.html
文件概述为空。概述中0%0 SLOC 0文件。
我的假设是mocha没有识别或加载app-cov的覆盖范围。我只为位置模型编写了一个单元测试。这是我在测试中要求文件的方式吗?
我习惯使用phpunit和它的配置,所以我把测试套件放在一起有点麻烦。
向任何可以推荐解决方案或如何整理我的ugle代码的人提升:)
答案 0 :(得分:3)
你的makefile有很多问题。
1-为什么需要TESTS变量?你的测试在test /子目录中,所以除非你有其他.js文件(为什么你呢?),这是mocha的默认值:“默认情况下,mocha(1)将使用模式./test/*。 js,所以它通常是一个放置测试的好地方。“
2-您的test:
和test-cov:
条目都将EXPRESS_COV环境变量设置为1,这意味着您无法在没有coverage选项的情况下运行测试(无法使用makefile) 。如果您总是想要进行覆盖测试,那么这可能没问题,但为什么要有2个条目呢?查看express library Makefile以获得一个好例子。如果您按照此示例操作,则test:
条目不应设置EXPRESS_COV。
3-您的gen-cov条目错误,实际上应该根据存储已检测文件的子目录的名称调用app-cov:
。顺便说一句,为什么不选择标准的“lib-cov”(和非libns的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):
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
编辑:我刚刚注意到,在您的测试代码中,您在/ app /文件夹中明确地require
了一个模型。您必须像在索引文件中那样使用EXPRESS_COV变量。