node.js – 使用Istanbul进行针对Node微服务的集成测试

在使用istanbul进行集成测试时,文档非常稀少.当我通过我的摩卡测试时,我得到没有收集覆盖信息,退出时没有写覆盖信息.

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

✗ istanbul instrument . -o .instrument

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

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

✗ 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

当我运行伊斯坦布尔报告时,显然没有任何可报告的内容.

我错过了什么?

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

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

> Javascript Integration Tests Coverage with Istanbul

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

看看one of the bugs,过去显然有一些痛苦,有些版本的istanbul在NodeJS代码中遇到了“use strict”模式的问题.

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

点赞