Получение отчета о покрытии 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.js
mocha
соответствующая часть
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.json
scripts
как то есть:
"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",