typescript - Kann Jest-Abdeckungsbericht nicht erzeugen
Ich arbeite an einem Next.js-Projekt in Typescript und verwende derzeit den SWC-Compiler. Daher verwende ich @swc/jest für meine Tests. Alle meine Tests bestehen, aber der Coverage-Bericht kommt immer leer zurück. So sieht meine jest.config.js aus:
module.exports = {
'roots': ['<rootDir>/../src'],
'moduleDirectories': ['node_modules', 'src'],
'setupFilesAfterEnv': ['<rootDir>/setup-tests.js'],
'coverageDirectory': '<rootDir>/../coverage',
'verbose': true,
'collectCoverage': true,
'transform': {
'^.+\\.(t|j)sx?$': [
'@swc/jest',
{
'jsc': {
target: 'es2021',
},
'sourceMaps': true,
},
],
},
'collectCoverageFrom': [
'<rootDir>/../src/**.{ts,js,tsx,jsx}',
'!**/node_modules/**',
],
}
Meine Dateistruktur sieht folgendermaßen aus:
.
├── coverage
├── jest
│ ├── jest.config.js
│ ├── setup-tests.js
├── src/
├── tsconfig.json
Die Ausgabe sieht so aus:
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 0 | 0 | 0 | 0 |
----------|---------|----------|---------|---------|-------------------
Test Suites: 11 passed, 11 total
Tests: 25 passed, 25 total
Snapshots: 0 total
Time: 1.307 s
Ran all test suites.
Ich habe ein Problem bei @swc/jest erstellt, aber ich bin mir nicht sicher, ob das ein Problem bei ihnen oder etwas anderes ist, also dachte ich, ich frage auch hier.
Antwort #1
Ihr Wert für 'collectCoverageFrom' scheint mir in Ihrer Jest-Konfiguration fehlerhaft zu sein. Sie würden doppelte Sternchen ** verwenden, um alle Verzeichnisse und Unterverzeichnisse rekursiv zu erfassen, und ein einzelnes * als Platzhalter (ob für einen Verzeichnisnamen oder einen Dateinamen).
Um alle Dateien in allen Verzeichnissen zu erfassen (egal wie viele Unterverzeichnisse) ist:
src/**/*
Wenn Sie nur js- und ts-Dateien in allen Verzeichnissen möchten (egal wie viele Unterverzeichnisse):
src/**/*.{js,ts}
Wenn Sie alle Dateien nur im src-Verzeichnis haben:
src/*
Was Sie in Ihrer Konfiguration haben, stimmt mit einem Verzeichnis überein, das auf js, ts usw. endet.
