Mocha + Chai命令行退出,错误代码编号等于测试失败计数

时间:2016-11-24 14:09:45

标签: node.js unit-testing mocha chai

我是Node的新手,我正在努力创建一个独立程序。我正在使用Mocha和Chai来测试我的函数(此处也是新的),并使用此节点运行脚本运行它们:

"test": "mocha tools/testSetup.js \"src/**/*.spec.js\" --reporter progress"

(我试过没有记者选项)。测试运行正常,当测试失败时,它会继续运行其余部分,然后创建一个(非常详细的)报告,说明失败的原因。但随后测试套件退出节点,错误代码等于失败的测试数量,因此如果三次测试失败,则错误代码为3,如果没有测试失败,则错误代码为0.这在以下时会产生可怕的输出至少有一个测试失败,类似于应用程序崩溃时。

这是设计的吗?我应该做些什么来赶上"赶上"错误?或者我做错了什么,退出代码实际上应该只是0而不管测试是否失败?

2 个答案:

答案 0 :(得分:3)

  

这是设计的吗?

是的,在npm部分和Mocha的部分都是。

通常,当您运行测试套件时,您希望测试运行器在出现任何故障时具有非零退出代码。为什么?非零退出代码使得调用测试运行程序的代码知道测试是否通过非常容易。无需解析报告或其他任何内容。只需检查退出代码即可。对于调用测试运行器的代码不关心的情况,它可以忽略退出代码。

Mocha恰好以失败次数退出,满足了在出现任何故障时使用非零退出代码的最低要求。

npm的角度来看,你遇到的硬性失败也是故意的。问题是npm经常用于安装包,而某些包作为其安装的一部分执行测试运行。你希望那里的失败是一场艰难的失败。也许npm可以设计用于区分在命令行发出普通npm test的用户与作为安装的一部分的测试运行。这将是对npm的增强,但目前的行为并非偶然。

  我应该做些什么来“抓住”这个错误吗?

如果您要执行的操作是阻止npm向您发出ELIFECYCLE错误,那么可以通过执行mocha [parameters] || true中和错误,但这样做会有效使调用npm test的任何东西都无法通过退出代码立即检测测试是否通过。您可能使用的任何依赖npm test的工具都无法知道测试是否通过。 我不会这样做。

  

或者我做错了什么,退出代码实际上应该只是0而不管测试是否失败?

不,如上所述,Mocha的退出代码是设计的。如果您要修改测试套件以尝试解决它,那么您将破坏一项功能。

就个人而言,我回避npm通过在npm之外调用我的测试套件来测试失败时尖叫天空正在下降的整个问题(例如,这通常意味着运行gulp test,因为我使用gulp来运行构建任务),我保留npm test用于那些测试失败确实是一个严重失败的情况。

答案 1 :(得分:1)

我几乎使用@Luis的解决方案,有些人可能会说

  

我不会这样做

然后我尝试了一些非常简单的东西,我认为是一个修复

运行单元测试时, NOT 使用

npm run test

改为使用

npm test

容易羞怯