【问题标题】:How to finish/kill Mocha/Istanbul test cycle with Node.js如何使用 Node.js 完成/杀死 Mocha/Istanbul 测试周期
【发布时间】:2017-10-19 17:41:28
【问题描述】:

我一直致力于开发一个带有 Node.js 后端的 Azure 移动应用程序,该应用程序在本地运行且可测试。我终于让一切正常并开始编写我的测试。然后,我了解了伊斯坦布尔/纽约市以测试代码覆盖率。

一切似乎都运行良好,我能够获得为我的所有*.js 文件生成的代码覆盖率文件,但只有在我手动按下 Ctrl+C 之后。

这是结束一组mocha 测试的正常方式吗?似乎有/应该有某种方法来结束一组测试并自动终止为测试会话创建的 Node.js/express 服务器。

我是 Node.js/express/mocha/nyc 的基本细节方面的新手。我的期望错了吗?有没有办法做我想做的事?

【问题讨论】:

  • 你在 mocha 的 after 上停止你的服务器吗?
  • 没有。我确定该怎么做。另外,我有很多不同的测试文件,我使用-S 选项始终按字母顺序处理它们。我应该将它添加到最后一个测试文件中吗?
  • @lascort 最后的评论是给你的。忘记包含您的用户标签。

标签: node.js express mocha.js istanbul


【解决方案1】:

我不确定您在哪里提升服务器 (server.listen),但在“全局”after 上停止服务器应该就足够了。

我通常做的是创建一个bootstrap.test.js 并指定测试前后应该发生什么,然后像这样运行 mocha:

mocha /test/bootstrap.test.js /test/unit/**/*.test.js /test/integration/**/*.test.js.

您需要确保 after 不在 describe 内,因此它会在所有测试完成后运行。

所以你的 bootstrap.test.js 应该看起来像这样:

/*
    imports and stuff
*/

before(function () {
    // LIFT YOUR SERVER //
});

after(function () {
    server.close();
});

编辑:

至于Ctrl-c的程序化等价物,即process.exit(0)

【讨论】:

  • 现在,我似乎在每个测试文件中提升我的服务器,然后在每个文件的 after 块中调用 server.close()。我不介意让服务器在每个测试周期而不是每个测试文件中启动一次,但我不确定这是否能回答我的问题。也许我不清楚(我脑子里还是有点糊涂),但我正在寻找 Ctrl+C 的程序等效项(它会杀死我的进程并导致伊斯坦布尔打印出我的代码覆盖结果)。感谢您的回答!
  • 编程等效项是process.exit(0),但如果服务器已停止,我认为没有必要这样做。至于在每个测试套件中提升服务器,这实际上是一种更好的方法。
  • 谢谢,process.exit(0) 命令有效!我只是在最后一个after 块中用该命令替换了server.close()(这是一致的,因为使用了-S 选项)。我不确定您所说的“如果服务器已停止,我认为没有必要这样做”是什么意思。即使在每个 after 块中关闭服务器,也基本上在最后一次测试运行后“停止”了我的终端。只有在按下 Ctrl+C 后,我才能得到伊斯坦布尔打印输出并返回命令提示符。您也可以将之前的评论移到您的答案中吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 2017-10-20
  • 2011-01-27
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多