【问题标题】:How to get coverage report for external APIs?如何获取外部 API 的覆盖率报告?
【发布时间】:2016-10-06 12:06:21
【问题描述】:

我正在尝试获取 API 代码的覆盖率报告。我的所有测试用例都在 mocha 中完美运行。我的问题是我的 API 服务器和测试用例是在不同的存储库中编写的。

我在 localhost 上的特定端口上启动我的节点 API 服务器,然后在 mocha 中使用 supertest,点击 localhost url 来测试服务器的响应。

您能否建议我为这些 API 生成覆盖率报告的最佳方法?

【问题讨论】:

    标签: node.js mocha.js istanbul


    【解决方案1】:

    测试环境

    如果你想获得覆盖,supertest 应该能够引导应用服务器,就像在express example 中一样。

    缺点是你不能在运行的服务器上运行你的测试,比如

    var api = request('http://127.0.0.1:8080');
    

    但你必须包含你的应用入口点才能让 supertest 像启动它一样

    var app = require('../yourapp'); 
    var api = request(app);
    

    当然,这可能(也可能不会)导致对您的应用引导过程进行一些重构。

    作为其他选项,您可以使用节点 CLI 调试功能或使用 node-inspector

    覆盖设置

    假设您愿意安装 istanbul 与 mocha 关联以获得覆盖。

    npm install -g istanbul
    

    然后

    istanbul cover mocha --root <path> -- --recursive <test-path>
    
    • cover 是用于生成代码覆盖率的命令
    • mocha 是用于运行测试的可执行js文件
    • --root &lt;path&gt; 查找要检测的文件的根路径(也称为“源文件”)
    • -- 用于将参数传递给您的测试运行器
    • --recursive &lt;test-path&gt;查找测试文件的根路径

    然后您可以添加--include-all-sources 以获取所有源文件的封面信息。

    此外,您还可以获得更多跑步帮助 istanbul help cover

    【讨论】:

    • --root &lt;path&gt; 应该指向我的测试用例的路径,还是我的路由处理程序?
    • 它应该指向应用程序的源代码(也就是要检测的代码)。
    • 当我运行这个命令 istanbul cover mocha --root /path/to/other/repo/ 时,我的测试用例都没有运行,因为我看到了来自 mocha 的 0 passing 消息。我应该在哪里为我的测试用例提供路径?
    • mocha 默认运行test/下的文件。如果您使用了另一个目录,您可以将其作为参数传递,例如 istanbul cover mocha --root /path/to/other/repo/ -- --recursive /path/to/tests。注意递归前的双破折号!
    • 抱歉回复晚了。所以我现在运行了这个命令istanbul cover mocha --root /path/to/other/repo/ -- --recursive /path/to/tests/,我的测试运行正常,但最后我看到了:No coverage information was collected, exit without writing coverage informationPS 我在测试用例存储库中运行此命令,而我的 API 代码位于测试用例存储库之外的其他存储库中,因此,伊斯坦布尔可能不知道正在执行哪些代码行API,因此不涵盖它们。
    猜你喜欢
    • 2014-09-09
    • 2019-03-16
    • 2018-07-18
    • 1970-01-01
    • 2021-07-10
    • 2020-12-21
    • 2016-12-07
    • 1970-01-01
    • 2020-05-05
    相关资源
    最近更新 更多