gpt4 book ai didi

node.js - node.js 中 Mocha 的代码覆盖率

转载 作者:搜寻专家 更新时间:2023-10-31 23:49:42 25 4
gpt4 key购买 nike

简介

我安装了 jscoverage 并设置了一个 make 命令来为 app-cov 生成覆盖率数据并运行测试。

对于这个项目,我使用的是:node.js、mongoose、express、mocha 和 should。

相关文件:

生成文件:http://pastie.org/3529374

index.js:http://pastie.org/3529377

测试/模型/location.test.js:http://pastie.org/3529401

应用程序/run.js:http://pastie.org/3529523

问题

输出 coverage.html 文件概览是空的。 0% 0 SLOC 0 文件概览。

我的假设是 mocha 没有识别或加载来自 app-cov 的覆盖范围。我只为位置模型编写了一个单元测试。这是我在测试中要求文件的方式吗?

我习惯使用 phpunit 和它的配置,所以我在将测试套件放在一起时遇到了一些麻烦。

感谢任何可以推荐解决方案或如何整理我的 ugle 代码的人:)

最佳答案

您的 makefile 有很多问题。

1- 为什么需要 TESTS 变量?您的测试位于 test/子目录中,因此除非您在那里有其他 .js 文件(为什么要这样做?),否则这是 mocha 的默认设置:“默认情况下 mocha(1) 将使用模式 ./test/*。 js,所以它通常是放置测试的好地方。”

2- 您的 test:test-cov: 条目都将 EXPRESS_COV 环境变量设置为 1,这意味着您无法在没有覆盖选项的情况下运行测试(不能用 makefile,就是这样)。如果您总是想进行覆盖率测试,这可能没问题,但为什么要有 2 个条目?看express library Makefile一个很好的例子。如果您遵循此示例,您的 test: 条目不应设置 EXPRESS_COV。

3- 你的 gen-cov 条目是错误的,它实际上应该被称为 app-cov:,基于你存储检测文件的子目录的名称。顺便说一下,为什么不选择标准的“lib-cov”(和“lib”用于非检测的 js 文件)?当然不是必需的,但这是社区中许多人遵循的惯例。

4- 为什么要在运行 jscoverage 之前删除检测过的文件?不确定它是否会导致 make 出现问题,不这么认为,但它没有用,应该被删除。

5- test-cov 现在应该依赖于 app-cov(这可能是问题的核心,make 从未检测到依赖项已过时,因为依赖项不存在!)。 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/文件夹中明确的模型。您必须像在索引文件中那样使用 EXPRESS_COV 变量。

关于node.js - node.js 中 Mocha 的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com