Mocha + Chai 命令行退出,错误代码编号等于测试失败计数
Mocha + Chai command line exit with error code number equal test fail count
我是 Node 的新手,正在尝试创建一个独立的程序。我正在使用 Mocha 和 Chai 来测试我的功能(这也是新功能),并且我 运行 使用此节点 运行 脚本来测试它们:
"test": "mocha tools/testSetup.js \"src/**/*.spec.js\" --reporter progress"
(我也试过没有记者选项)。测试 运行 很好,当一个测试失败时,它会保留 运行 剩下的,然后创建一个(非常详细的)失败报告。但是随后测试服退出节点,错误代码等于失败的测试数,因此如果三个测试失败则错误代码为 3,如果没有测试失败则错误代码为 0。这会在 at 时产生糟糕的输出至少一项测试失败,类似于应用程序崩溃。
这是设计使然吗?我应该对 "catch" 错误做些什么吗?还是我做错了什么,无论测试是否失败,退出代码实际上应该只是 0?
Is this by design?
是的,npm
和 Mocha 都是。
通常,当您 运行 测试套件时,您希望测试 运行 在出现任何故障时具有非零退出代码。为什么?非零退出代码使调用测试 运行 的代码很容易知道测试是否通过。无需解析报告或其他任何内容。只需检查退出代码。对于调用测试的代码 运行ner 不关心的情况,那么它可以忽略退出代码。
Mocha恰好以失败次数退出,满足了失败时使用非零退出代码的最低要求。
从npm
的角度来看,你遇到的hard failure,看起来像crash,也是故意的。问题是 npm
通常用于安装软件包,并且某些软件包会在安装过程中执行测试 运行。你希望那里的失败是一个艰难的失败。也许 npm
可以设计成区分用户在命令行发出 运行-of-the-mill npm test
和作为安装一部分的测试 运行。这将是对 npm
的增强,但当前行为并非偶然。
am I supposed to do something to "catch" the error?
如果你想做的是防止 npm
给你一个 ELIFECYCLE
错误,你 可以 通过执行 mocha [parameters] || true
但这实际上会使调用 npm test
的任何东西都无法通过退出代码立即检测到测试是否通过。您可能使用的任何依赖于 npm test
的工具都无法知道测试是否通过。 我不会这样做。
Or am I doing something wrong and the exit code should actually be just 0 regardless of tests failing?
不,如上所述,Mocha 的退出代码是设计使然。如果您要修改您的测试套件以尝试解决它,您将破坏一个功能。
就我个人而言,我通过在 npm
外部调用我的测试套件(例如,这通常意味着 运行ning gulp test
因为我使用 gulp
来 运行 构建任务),我保留 npm test
用于那些测试失败确实是严重失败的情况。
我几乎使用了@Luis 的解决方案,有些人可能会说
I would not do this
然后我尝试了一些我认为可以修复的非常简单的方法
当你运行你的单元测试不使用
npm run test
改为使用
npm test
简单易行
我是 Node 的新手,正在尝试创建一个独立的程序。我正在使用 Mocha 和 Chai 来测试我的功能(这也是新功能),并且我 运行 使用此节点 运行 脚本来测试它们:
"test": "mocha tools/testSetup.js \"src/**/*.spec.js\" --reporter progress"
(我也试过没有记者选项)。测试 运行 很好,当一个测试失败时,它会保留 运行 剩下的,然后创建一个(非常详细的)失败报告。但是随后测试服退出节点,错误代码等于失败的测试数,因此如果三个测试失败则错误代码为 3,如果没有测试失败则错误代码为 0。这会在 at 时产生糟糕的输出至少一项测试失败,类似于应用程序崩溃。
这是设计使然吗?我应该对 "catch" 错误做些什么吗?还是我做错了什么,无论测试是否失败,退出代码实际上应该只是 0?
Is this by design?
是的,npm
和 Mocha 都是。
通常,当您 运行 测试套件时,您希望测试 运行 在出现任何故障时具有非零退出代码。为什么?非零退出代码使调用测试 运行 的代码很容易知道测试是否通过。无需解析报告或其他任何内容。只需检查退出代码。对于调用测试的代码 运行ner 不关心的情况,那么它可以忽略退出代码。
Mocha恰好以失败次数退出,满足了失败时使用非零退出代码的最低要求。
从npm
的角度来看,你遇到的hard failure,看起来像crash,也是故意的。问题是 npm
通常用于安装软件包,并且某些软件包会在安装过程中执行测试 运行。你希望那里的失败是一个艰难的失败。也许 npm
可以设计成区分用户在命令行发出 运行-of-the-mill npm test
和作为安装一部分的测试 运行。这将是对 npm
的增强,但当前行为并非偶然。
am I supposed to do something to "catch" the error?
如果你想做的是防止 npm
给你一个 ELIFECYCLE
错误,你 可以 通过执行 mocha [parameters] || true
但这实际上会使调用 npm test
的任何东西都无法通过退出代码立即检测到测试是否通过。您可能使用的任何依赖于 npm test
的工具都无法知道测试是否通过。 我不会这样做。
Or am I doing something wrong and the exit code should actually be just 0 regardless of tests failing?
不,如上所述,Mocha 的退出代码是设计使然。如果您要修改您的测试套件以尝试解决它,您将破坏一个功能。
就我个人而言,我通过在 npm
外部调用我的测试套件(例如,这通常意味着 运行ning gulp test
因为我使用 gulp
来 运行 构建任务),我保留 npm test
用于那些测试失败确实是严重失败的情况。
我几乎使用了@Luis 的解决方案,有些人可能会说
I would not do this
然后我尝试了一些我认为可以修复的非常简单的方法
当你运行你的单元测试不使用
npm run test
改为使用
npm test
简单易行