使用伊斯坦布尔对Node微服务进行集成testing

在进行集成testing的伊斯坦布尔覆盖面时,文档相当稀less。 当我通过我的摩卡testing时,我得到No coverage information was collected, exit without writing coverage information

我做的第一件事就是把我所有的源代码整理好:

 ✗ istanbul instrument . -o .instrument 

就我而言,这是一个REST微服务,它是Docker化的,我已经写了Mochatesting来运行它来validation它,一旦它被部署。 我的期望是伊斯坦布尔会给我的代码覆盖从该节点服务的来源。

第二步我执行这个命令在我的testing代码上运行节点:

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

之后,我运行我的testing使用以下从我的主要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 ,显然没有什么可报告的。

我错过了什么?

看到这个项目的开发分支重现问题。

       

网上收集的解决方案 "使用伊斯坦布尔对Node微服务进行集成testing"

这看起来像你正在关注当我试图找出如何攻击这个时间的问题,我只是看着博客文章:

  • Javascript整合testing与伊斯坦布尔的覆盖面

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

看看其中的一个bug ,过去显然有一些痛苦,有些版本的istanbul在NodeJS代码中使用了“use strict”模式。

所以我的build议是运行所有的testing,然后确保进程都被终止,然后运行report命令,并检查覆盖* .json文件是否写入某处。 除此之外,将这个问题作为github回购的问题也许是有意义的,那里似乎有很好的活动和答案。

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

  1. 跳过代码; 这是不需要的
  2. 呼吁伊斯坦布尔与--handle-sigintbuild议--handle-sigint heckj并删除标志 – --report none
  3. 一旦你的服务器启动,只要正常运行testing: ./node_modules/.bin/_mocha -R spec ./test/** --recursive
  4. 从步骤2closures服务器以输出覆盖范围
  5. open coverage/lcov-report/index.html查看HTML文件