J'ai du mal à obtenir une couverture adéquate avec nyc/istanbul pour mon projet de typecript/moka/gulp. J'ai essayé un certain nombre d'approches, certains d'entre eux semblent être incapables d'utiliser des cartes sources et d'autres échoue en raison d'erreurs ts-node
/tsc
. Ma configuration actuelle est:Obtenir le rapport de couverture nyc/istanbul pour travailler avec tapuscrit
nyc
config pertinente dans 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
partie pertinente
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
}
}
Avec la couverture configuration ci-dessus produc es résultats pour tous les fichiers, mais ils sont incorrects pour les fichiers TS, probablement parce que les cartes sources ne sont pas utilisées (c.-à-d. le rapport ne montre aucune couverture pour les lignes qui sont des commentaires et les chiffres semblent également faux).
Avec un certain nombre de variantes approches ont essayé sans succès l'un des plus couramment proposée consiste à ajouter encore la configuration "require": ["ts-node/register"]
-nyc
je reçois des erreurs se plaignent-à-dire gulpfile.js
, docs/reports/coverage/lcov-report/prettify.js
et d'autres fichiers JS à être not under 'rootDir'
qui est correct mais il n'est pas clair pourquoi ts-node
essaie de traiter tous les fichiers sur src
même s'ils sont exclus dans tsconfig.json
(encore la configuration devient vraiment complexe).
J'apprécierai toute suggestion de chemin à faire pour obtenir un rapport de couverture approprié pour les fichiers TS.
La mise en place de tests corrects avec couverture peut parfois être fastidieuse. J'ai arrêté d'utiliser Mocha/Istanbul pour les projets React-Typescript et je suis passé à Jest et ts-jest (https://github.com/kulshekhar/ts-jest), qui est fourni avec Istanbul et tous les goodies nécessaires pour les tests React. C'est pour moi une pile stable à travers différentes versions. –
Merci de suggestion! Alors qu'en fait c'est l'une de mes considérations, ai-je raison de dire qu'il faudra peut-être réécrire puisque 'jest' diffère de' mocha'? – ciekawy
Les tests de moka sont facilement réécrits en plaisanterie. Supprimez les sections de description et remplacez-la() par test(). Les assertions sont également différentes. Mais les sections avant * et après * sont les mêmes. Prend un peu de temps, mais c'est long ... –