我已经解决了这个问题一段时间了,我不能让现有的解决方案适合我。

我有一个用Express.js编写的Node.js API。 我一直在使用Mocha,Chai和Supertest为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的测试覆盖率:

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

伊斯坦布尔的:

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

两者都遭遇同样的问题:

https://www.dropbox.com/s/qcgmout6hx91xgs/Screenshot%202014-04-19%2020.42.44.png

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

我尝试了另一种解决方案 - 伊斯坦布尔中间件 ,它实际上似乎更好地捕获了信息(尽管它很笨拙)。 然而,这里的相同路线如下:

在此输入图像描述

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

注意:我已经安装了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/
Mocha的代码覆盖率

===============>>#1 票数:13

我只是有同样的情况,我发现它必须采用我使用supertest的方式

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

     var request = require('supertest') var api = request('http://127.0.0.1:3000') 
  • 我通过要求我的快递应用来修复它:

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

===============>>#2 票数:1

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

请说明实际涵盖的路线,因为伊斯坦布尔非常聪明,如果陈述如何。

如果您在伊斯坦布尔发现了一个错误,我建议您在那里发布一个错误。

  ask by Ethan Mick translate from so

未解决问题?本站智能推荐:

2回复

Istanbul和Mocha Node js代码覆盖率的配置

我是伊斯坦布尔和摩卡框架的新手。 对于我的Node.js项目,我正在配置摩卡咖啡和伊斯坦布尔。 它单独工作正常。 我不知道如何整合两者并生成覆盖率报告。 我在Mac的Package.json脚本中找到了一些文档或配置文件。 但是我需要为Windows机器设置。
2回复

使用coffeescript进行mocha测试的伊斯坦布尔代码覆盖率

我正在使用mocha来运行纯粹在coffeescript中的测试。 我还希望能够使用istanbul生成代码覆盖率报告。 注意,我在mocha.opts文件中使用带有选项--compilers coffee:coffee-script/register的mocha.opts 。 我
1回复

带有Mocha测试用例的Istanbul覆盖率仅显示规格文件(测试文件)的覆盖率报告

伊斯坦布尔覆盖报告仅显示规格文件(即测试文件)的覆盖报告,而不显示原始路由器和控制器文件。 它显示规格文件的100%覆盖率和路由器文件的0%。 我正在使用的命令是npm test: 以下是伊斯坦布尔的覆盖率报告html文件的屏幕截图
1回复

伊斯坦布尔支票覆盖率始终返回true

我正在尝试设置npm以使用istanbul检查覆盖率。 这是我来自package.json脚本: 我也是这两个配置文件: .istanbul.yml mocha.opts 当我运行npm run coverage:report我得到以下输出: 因此, np
2回复

使用Istanbul和Mocha来覆盖ES6代码

我有用ES6编写的Node代码,我通过发出mocha --harmony测试。 测试很好 - 一切正常。 现在我想添加coverage和istanbul,但是我遇到了第一个箭头函数的错误: 这是我试过的: 安装伊斯坦布尔和谐(来自git://github.com/got
1回复

动态更改要求代码声明覆盖测试的更好方法?

我有一个node.js库,已经使用mocha和chai为BDD设置了。 我还添加了伊斯坦布尔的代码覆盖范围。 所有的一切都通过运行繁重的任务。 我挣扎了一段时间,在将存储库基于https://github.com/morkai/h5.buffers进行设置后,终于使它工作了。 它可行
1回复

带有node-jscoverage,mocha和express的功能测试覆盖率报告

我想了解快速端点上的功能测试。 我做了这个简单的设置。 nodetest / index.js nodetest / LIB / index.js nodetest /测试/ simple.js nodetest / Makefile文件 我正在使用env
1回复

CoffeeScript代码覆盖率

是否可以在不使用CoffeeScriptRedux编译器的情况下对CofeeScript源执行代码覆盖(此代码在ibrik中使用)。 我了解此新编译器的优点,但看起来仍未完成,因此不适用于我的项目。
1回复

Teamcity + NYC + Istanbul-生成测试覆盖率报告

我正在尝试每次生成时都向团队合作生成测试报告。 我研究了几种方法,最后找到了伊斯坦布尔的teamcity记者: teamcity 现在,我正在尝试将其集成到teamcity中,但是我没有找到任何有关它的说明。
1回复

Istanbul代码覆盖率检查我的规范文件而不是源代码的覆盖率?

只是从一般的代码覆盖工具入手,但我认为我已经正确设置了所有内容。 但是,伊斯坦布尔正在生成我的规格文件而不是源文件的覆盖率报告吗? 当我运行jasmine-node repeatSpec.js --verbose 我得到: 这是正确的,如果我故意不通过测试,那么它也会正确失