【问题标题】:Using Istanbul for integration tests against a Node microservice使用 Istanbul 对 Node 微服务进行集成测试
【发布时间】:2016-02-24 18:39:43
【问题描述】:

关于使用 istanbul 进行集成测试的文档非常少。当我运行 mocha 测试时,我得到No coverage information was collected, exit without writing coverage information

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

✗ istanbul instrument . -o .instrument

在我的例子中,这是一个 Docker 化的 REST 微服务,我已经编写了 Mocha 测试来针对它运行,以便在部署后对其进行验证。我的期望是伊斯坦布尔将为我提供针对该 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

当我运行istanbul report 时,它显然没有什么可报告的。

我错过了什么?

查看此project 的开发分支以重现问题。

【问题讨论】:

    标签: node.js mocha.js istanbul


    【解决方案1】:

    伊斯坦布尔的主人帮我解决了这个问题。通过执行以下步骤,我能够让事情顺利进行:

    1. 跳过检测代码;不需要
    2. 按照@heckj 的建议使用--handle-sigint 调用伊斯坦布尔并删除标志--report none
    3. 服务器启动后,正常运行测试:./node_modules/.bin/_mocha -R spec ./test/** --recursive
    4. 从第 2 步关闭服务器以输出覆盖率
    5. 查看open coverage/lcov-report/index.html中的HTML文件

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 我与该帖子的作者通信,但我们找不到解决方案,所以我会听取您的建议并发布问题。如果您有兴趣仔细查看,我在原始帖子中添加了我的 Git 存储库。
      猜你喜欢
      • 2020-03-08
      • 2016-01-25
      • 2017-07-10
      • 2018-06-11
      • 1970-01-01
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多