Получение отчета о покрытии nyc/istanbul для работы с машинописью

Я изо всех сил пытаюсь получить надлежащее освещение с помощью nyc/istanbul для моего проекта машинопись /mocha/gulp. Я перепробовал несколько подходов, некоторые из которых, кажется, не могут использовать исходные карты, а другие отказывают из-за ts-node/tsc ошибки. Моя текущая настройка:

nyc соответствующий конфиг в package.json

"scripts": {
    "test:coverage": "nyc npm run test:unit",
    "test:unit": "gulp mocha"
}
"nyc": {
    "check-coverage": true,
    "all": true,
    "extension": [
      ".js",
      ".jsx",
      ".ts",
      ".tsx"
    ],
    "include": [
      "src/**/!(*.test.*).[tj]s?(x)"
    ],
    "reporter": [
      "html",
      "lcov",
      "text",
      "text-summary"
    ],
    "report-dir": "docs/reports/coverage"
  }

gulpfile.jsmocha соответствующая часть

const SRC_DIR = path.join(__dirname, 'src');
const SRC_FILES = path.join(SRC_DIR, '**', '*.[jt]s?(x)');
const TEST_FILES = path.join(SRC_DIR, '**', '*.test.[jt]s?(x)');
const MOCHA_CONFIG = {
    src: [
        TEST_FILES
    ],
    watchSrc: [
        SRC_FILES,
        TEST_FILES
    ],
    mocha: {
        // compilers: [
        //     'ts:ts-node/register',
        //     'tsx:ts-node/register'
        // ],
        require: [
            './tests/setup.js',
            'ignore-styles',
            'source-map-support/register'
        ]
    }
};
gulp.task('mocha', mocha(MOCHA_CONFIG));

tsconfig.json

{
  "compilerOptions": {
    "baseUrl": "./",
    "rootDir": "./src",
    "outDir": "./build",
    "allowJs": true,
    "module": "commonjs",
    "target": "es5",
    "lib": ["es5", "es6", "dom"],
    "sourceMap": true,
    "inlineSourceMap": false,
    "inlineSources": false,
    "experimentalDecorators": true,
    "noUnusedParameters": true,
    "noUnusedLocals": true,
    "jsx": "react",
    "moduleResolution": "node"
  },
  "exclude": [
    "docs",
    "tests",
    "**/*.test.js",
    "**/*.test.jsx",
    "**/*.test.ts",
    "**/*.test.tsx",
    "tools",
    "gulpfile.js",
    "node_modules",
    "build",
    "typings/main",
    "typings/main.d.ts"
  ],
  "awesomeTypescriptLoaderOptions": {
    "useCache": true,
    "useBabel": true
  }
}

При описанной выше настройке покрытие дает результаты для всех файлов, но они неверны для файлов TS, скорее всего из-за того, что исходные карты не используются (т. Е. В отчете не показано покрытие для строк, являющихся комментариями, и цифры также кажутся неправильными).

С несколькими вариантами попыток, которые безуспешно пробовали, одним из наиболее часто предлагаемых является добавление "require": ["ts-node/register"] в nyc Конфигурация еще тогда я получаю сообщения об ошибках, т.е. gulpfile.js, docs/reports/coverage/lcov-report/prettify.js и количество других файлов JS, которые будут not under 'rootDir' что правильно пока не понятно почему ts-node пытается обработать все файлы из src даже если они исключены в tsconfig.json (все же конфигурация становится действительно сложной).

Я буду признателен за любые предложения о том, каким путем можно получить надлежащий отчет о покрытии файлов TS.

1 ответ

Решение

Недавно я нашел удовлетворительное решение, используя "target": "es6" вместо es5 в tsconfig.json"s compilerOptions, При изменении target прямо в tsconfig.json может быть не вариант, так как это влияет на сборку, другой совет должен использовать TS_NODE_COMPILER_OPTIONS='{"target":"es6"} которые могут быть добавлены непосредственно в package.jsonscripts как то есть:

"test:coverage": "TS_NODE_COMPILER_OPTIONS='{\"target\":\"es6\"}' nyc npm run test:unit",

где test:unit любой способ используется для запуска реальных тестов (в моем случае просто gulp mocha,

ПРИМЕЧАНИЕ: я также обновил nyc до последней версии 11.1.0 и ts-node в 3.3.0 как предложено в https://github.com/istanbuljs/nyc/issues/618 теме

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

Я не получал никаких данных о покрытии, пока не добавил exclude-after-remap=falseв раздел Нью-Йорка моегоpackage.json.

Это указано в документации, но не очень заметно (IMO).

Поскольку многие изменения нарушили старые рабочие настройки, я создал подробный пример проекта, охватывающий typescript + mocha + nyc, поддерживающий надлежащее покрытие также для не вызываемых файлов (это часто не включается в примеры), а также некоторые примеры модульных тестов и проверки качества с использованием последних версии.

У меня было несколько проблем при посещении мокко 8+ nyc 15+. Может быть, это также помогает кому-то еще наткнуться на это.

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

Если вас интересует только покрытие, проверьте.ncyrc.yml и mocharc.yml, а также конфигурацию вызова в package.json. Конфиги запуска VsCode также включали:

.nycrc.yml

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

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

.mocharc.yml

require:
  - ts-node/register
  - source-map-support/register
recursive: true
color: true
exit: true
extension:
  - ts
  - test.ts

тестовая работа в package.json

"test": "npm run lint && nyc mocha src test",
Другие вопросы по тегам