Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js中Mocha的代码覆盖率_Node.js_Express_Mocha.js - Fatal编程技术网

node.js中Mocha的代码覆盖率

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模型编

简介

我已经安装了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模型编写了一个单元测试。这是我在测试中要求文件的方式吗

我已经习惯了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