node.js中Mocha的代码覆盖率

时间:2012-03-05 22:47:10

标签: node.js express mocha

简介

我安装了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代码的人提升:)

1 个答案:

答案 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变量。