2

我目前正在尝试使用 Mocha 和 NYC 在我的 fastify 路线上获得代码覆盖率。

我已经尝试预先检测代码,然后对检测代码运行测试,以及尝试以各种方式设置 NYC 以使其正常工作。

这是我目前的配置。所有以前的都产生相同的代码覆盖率输出):

纽约配置

"nyc": {
  "extends": "@istanbuljs/nyc-config-typescript",
    "extension": [
        ".ts",
        ".tsx"
    ],
    "exclude": [
        "**/*.d.ts",
        "**/*.test.ts"
    ],
    "reporter": [
        "html",
        "text"      
    ],
    "sourceMap": true,
    "instrument": true
}

路线文件:

const routes = async (app: FastifyInstance, options) => {

  app.post('/code', async (request: FastifyRequest, response: FastifyReply<ServerResponse>) => {
    // route logic in here
  });
};

集成测试:

import * as fastify from fastify;
import * as sinon from 'sinon';
import * as chai from 'chai';

const expect = chai.expect;
const sinonChai = require('sinon-chai');
chai.use(sinonChai);

describe('When/code POST is called', () => {
  let app;

  before(() => {
    app = fastify();

    // load routes for integration testing
    app.register(require('../path/to/code.ts'));
  });
  after(() => {
    app.close();
  });

  it('then a code is created and returned', async () => {
    const {statusCode} = await apiTester.inject({
      url: '/code',
      method: 'POST',
      payload:{ code: 'fake_code' }
    });
    expect(statusCode).to.equal(201);
  });
});

我的单元测试调用如下所示:

nyc mocha './test/unit/**/*.test.ts' --require ts-node/register --require source-map-support/register --recursive

我真的得到了 5% 的代码覆盖率const routes =。我真的很想弄清楚这一点。任何帮助将不胜感激!我在这里调查过的其他解决方案都不起作用。

4

1 回答 1

0

我有一个关于 typescript + mocha + nyc 的详细示例。它还包含 fastify 测试,包括路由测试(注入)以及使用 sinon 的 mock + stub 和 spy 测试。所有异步等待也是如此。

它使用所有现代版本,还涵盖未使用的文件以及 VsCode 启动配置。随时在这里查看:

https://github.com/Flowkap/typescript-node-template

具体来说,我认为

instrumentation: true

弄乱了结果。这是我的工作 .nycrc.yml

extends: "@istanbuljs/nyc-config-typescript"

reporter:
  - html
  - lcovonly
  - clover
  # those 2 are for commandline outputs
  - text
  - text-summary
report-dir: coverage

在我上面提到的例子中,我什至对 fastify 的模拟 ans tub 部分都有适当的覆盖。

于 2020-11-13T23:17:02.617 回答