当前位置: 首页 > 知识库问答 >
问题:

如何在基于Express的API上设置代码覆盖率?

上官彬
2023-03-14

我在这个问题上已经有一段时间了,我不能让现有的解决方案为我工作。

我有一个用E编写的Node.jsAPIxpress.js.我一直在使用摩卡、柴和超级测试为该API编写测试。这些测试大多是集成测试。

一个测试可能如下所示:

it('should fail to register a new user without the proper information', function(done) {
  api.post('/user')
  .send({})
  .expect(400)
  .expect('Content-Type', /json/)
  .end(function(err, res) {
    should.exist(res.body);
    should.exist(res.body.error);
    should.not.exist(err);
    res.body.error.should.contain('Username');
    res.body.error.should.contain('password');
    done();
  });
});

实际的测试工作得很好,但是现在我需要能够查看这些测试的代码覆盖率。我必须知道我没有充分测试什么。我尝试使用摩卡的测试覆盖率:

mocha -R html-cov --coverage > coverage.html

和伊斯坦布尔的:

istanbul cover _mocha -- -R spec --timeout 5000

两者都面临着同样的问题:

你看,这是一个示例路由(用户注册)。我的测试肯定覆盖了它,但是因为他们不直接调用这个方法,覆盖工具假设它从来没有被调用过。这就是问题所在——代码覆盖工具没有捕获最终执行的代码。

我尝试了另一种解决方案——伊斯坦布尔中间件,它实际上似乎能更好地捕获信息(尽管它有黑客攻击性)。但是,此处的相同路线如下所示:

这显然也不可取。当然,其他应用程序也遇到了这个问题,他们是如何做到这一点的?

注意:我还安装了jscoverage,以使所有这些都能正常工作。

我看过的来源:
https://brianstoner.com/blog/testing-in-nodejs-with-mocha/
http://boycook.wordpress.com/2013/03/29/automated-javascript-testing-with-mocha-and-js-coverage-for-nodejs/
代码覆盖摩卡

共有2个答案

家经纶
2023-03-14

根据我在伊斯坦布尔的经验,我认为实际使用的路线可能存在逻辑错误。请将该测试设置为使用它。只需,然后看看伊斯坦布尔的报道。(无需使用伊斯坦布尔中间件,因为您的开发人员可以访问写入本地文件系统的html输出。)

请说明实际覆盖的路线,因为伊斯坦布尔在遵循if声明方面非常聪明。

如果你在伊斯坦布尔发现了一个bug,我鼓励你在那里发布bug。

李言
2023-03-14

我刚刚遇到了同样的情况,我发现它必须按照我使用supertest的方式进行:

>

  • 在我直接针对运行中的服务器测试我的应用之前,就像这样。

    var request = require('supertest')
    var api = request('http://127.0.0.1:3000')
    

    我通过要求我的express应用程序来修复它:

    var request = require('supertest')
    var app = require('../../../')
    var api = request(app)
    

  •  类似资料:
    • 对于我的Golang项目,我不清楚代码覆盖在Azure DevOps中是如何工作的。我的专长是看到这样的东西: 我很困惑,因为我看到这个提示“设置代码覆盖率”: 但是在“代码覆盖率”选项卡中是一个生成的html报告: 我在任务“发布代码覆盖率结果”中收到此警告 但是当我使用< Code > disable . Coverage . auto generate:' false ' 禁用html生成时

    • 目前,我可以让sonarqube使用mvn sonar:sonar扫描一些文件,但我永远无法获得代码覆盖率。我浏览了所有文档,并将jacoco包括在我的pom中,并试图设置项目属性以反映代码的结构。我以前没有真正使用过maven,所以这个任务有点难。有人能为我提供一个“像我五岁一样解释”的解决方案吗。我也有多个模块。

    • 我的应用程序中有一些子模块。有些我希望有代码覆盖率规则,有些我希望完全免除。 我的项目的根POM继承自父POM,该POM已将JaCoCo配置为: 在一个子模块中,我希望有50%的代码覆盖率,我已将JaCoCo配置为: 此模块的代码覆盖率绝对为零,但运行mvn clean verify不会产生任何错误。 我想也许我必须在根POM中定义它,所以我这样做: mvn clean verify是否产生错误:

    • 代码覆盖是查找未被测试执行的代码区域的过程。不过要记住的是这并不能说明你测试代码的有效性。 在requirements.txt文件中添加依赖包: coverage==4.4.2 然后,我们在manage.py中新增一个命令: import coverage COV = coverage.coverage( branch=True, include='project/*',

    • 这是一个重要的可量化指标,如果代码覆盖率很高,你就可以放心的修改代码,在发版本的时候也能睡个安稳觉。否则就是拆东墙补西墙,陷入无尽的 bug 诅咒中。 那么在 OpenResty 里面如何看到代码覆盖率呢?其实很简单,使用 LuaCov 可以很方便的实现。 我们先了解下 LuaCov,这是一个针对 Lua 脚本的代码覆盖率工具,通过 luarocks 来安装: luarocks install l

    • 问题内容: 我正在使用Mocha测试我的NodeJS应用程序。我无法弄清楚如何使用其代码覆盖功能。我尝试使用Google搜索,但没有找到任何合适的教程。请帮忙。 问题答案: 您需要一个额外的库来覆盖代码,而伊斯坦布尔的强大和便捷将使您震惊。通过Mocha测试后,请尝试以下操作: 现在,只需将命令nyc放在现有测试命令的前面,例如: