使用Istanbul对Node微服务进行集成测试

时间:2016-02-24 18:39:44

标签: node.js mocha istanbul

使用istanbul进行集成测试时,文档非常稀少。当我通过我的摩卡测试时,我得到No coverage information was collected, exit without writing coverage information

我要做的第一件事是检测我的所有源代码:

✗ istanbul instrument . -o .instrument

在我的例子中,这是一个Dockerized的REST微服务,我已经编写了Mocha测试来对其进行运行以在部署后对其进行验证。我的期望是istanbul会给我代码覆盖来自该节点服务的来源。

第二步我执行此命令在我的检测代码上运行节点:

✗ istanbul cover --report none .instrument/server.js

之后,我使用以下命令从我的主src目录运行我的测试,如下所示(结果):

✗ istanbul cover --report none --dir coverage/unit node_modules/.bin/_mocha -- -R spec ./.instrument/test/** --recursive


  swagger-tests
    #createPet
      ✓ should add a new pet (15226ms)
    #getPets
      ✓ should exist and return an Array (2378ms)
      ✓ should have at least 1 pet in list (2500ms)
      ✓ should return error if search not name or id
      ✓ should be sorted by ID (3041ms)
      ✓ should be sorted by ID even if no parameter (2715ms)
      ✓ should be only available pets (2647ms)
    #getPetsSortedByName
      ✓ should be sorted by name (85822ms)
    #deletePet
      ✓ should delete a pet (159ms)


  9 passing (2m)

No coverage information was collected, exit without writing coverage information

当我运行istanbul report时,显然没有任何可报告的内容。

我错过了什么?

请参阅此project的开发分支以重现问题。

2 个答案:

答案 0 :(得分:1)

这看起来像你正在关注我在试图弄清楚如何攻击这个时间问题的博客文章:

我并不具体说明您在上面发布的内容与该博客帖子所标识的内容之间有什么不同。要检查的一件事是确保在执行代码时生成coverage * .json文件。我不确定这些文件何时由伊斯坦布尔专门生成,因此您可能需要终止运行的已检测代码。在README的封面命令中还提到了--handle-sigint选项,暗示需要调用手动SIGINT中断以获取有关长时间运行进程的覆盖信息。

看看one of the bugs,过去显然有一些痛苦,有些版本的伊斯坦布尔在NodeJS代码中遇到“使用严格”模式的问题。

所以我的建议是运行所有测试,然后在运行report命令之前确保进程全部终止,并检查coverage * .json文件是否写在某处。除此之外,将此作为一个问题进入github回购可能是有意义的,那里似乎有很好的活动和答案。

答案 1 :(得分:1)

伊斯坦布尔的老板帮我解决了这个问题。我能够通过以下步骤实现这一目标:

  1. 跳过检测代码;它不需要
  2. 调用伊斯坦布尔--handle-sigint作为@heckj推荐并删除标记--report none
  3. 服务器启动后,只需正常运行测试:./node_modules/.bin/_mocha -R spec ./test/** --recursive
  4. 从步骤2关闭服务器以输出coverage
  5. open coverage/lcov-report/index.html
  6. 中查看HTML文件