如何测试异步呼叫,以便伊斯坦布尔将覆盖它?

时间:2019-04-11 05:56:19

标签: javascript unit-testing mocha istanbul nyc

我正在测试我的API的单元测试。编写完所有测试后,我实施了覆盖率工具istanbul。它涵盖了所有问题,但分支没有问题。查看报告后,我看到异步调用没有经过测试,但实际上它们至少运行了5次。在这种情况下,async运行了15次。

我的测试的小例子:

describe('GET /tables', () => {
  it('should GET tables', (done) => {
    chai.request(server)
      .get('/api/v1/tables')
      .then((res) => {
        expect(res).to.have.status(200);
        expect(res.body).to.be.a('array');
        done();
      })
      .catch((err) => {
        done(err)
      })
  });
})

该测试的覆盖率报告的一部分:

export default async (req, res) => {
  let tables = [];
  try {
    tables = await Tables.findAndCountAll({
      where: {
        ...req.filter,
        material: null
      },
      // order: sort ? sort : [],
      limit: req.pagination.limit, 
      offset: req.pagination.offset
    });
  } catch (err) {
    console.log(err);
    return res.status(500).send({ error: 'Internal server error' });
  }

第1行:标记async (r并说分支未被覆盖

1 个答案:

答案 0 :(得分:0)

解决了。据我了解这个问题,当nyc获得转译代码的覆盖范围时,它无法将其映射回原始源,因此,当发生这种情况时,nyc会降低覆盖范围。插件babel-plugin-istanbul修复了该问题。它提供了对ES2015 +代码的支持,因此可以使用babel向后兼容。我遵循了这个简单的tutorial