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

我有一个用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

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