Отсутствие покрытия кода для интеграционных тестов Fastify с использованием NYC / Istanbul, написанных на Typescript

В настоящее время я пытаюсь получить покрытие кода на своих маршрутах fastify с помощью Mocha и NYC.

Я пробовал заранее инструментировать код, а затем запускать тесты на инструментированном коде, а также просто пытался настроить NYC различными способами, чтобы заставить его работать правильно.

Вот моя текущая конфигурация. Все предыдущие производили одинаковый вывод покрытия кода):

конфигурация 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 =. Я действительно бью головой, пытаясь понять это. Любая помощь будет принята с благодарностью! Ни одно из других решений, которые я исследовал здесь, не работает.


person Christopher    schedule 18.03.2020    source источник
comment
Я бы тоже хотел узнать ответ на этот вопрос. У меня очень похожая проблема.   -  person David Vonka    schedule 19.06.2020


Ответы (1)


У меня есть подробный пример для машинописного текста + mocha + nyc. Он также содержит тесты fastify, включая тесты маршрута (инъекция), а также тесты mock + stub и spy с использованием sinon. Все async также ждут.

Он использует все современные версии, а также охватывает неиспользуемые файлы, а также конфигурации запуска 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.

person Flowkap    schedule 13.11.2020