Reputation: 803
I am working on backend Typescript project where I am trying to get coverage report for unit test case. Jest returns empty coverage report in terminal as well as in html report stating nothing. I also tried with -- --coverage --watchAll=false
but it also returns the empty document.
package.json
"scripts":{
"unit-test": "jest --config='./config/jest/jest_unit.config.js' --forceExit --detectOpenHandles",
}
jest_unit.config.js
/**
* @file Jest Unit Test Configuration File
*/
module.exports = {
roots: ['../../tests'],
testRegex: '.*_unit.test.(js|ts|tsx)?$',
globals: {
'ts-jest': {
tsConfig: 'tsconfig.json',
},
},
moduleFileExtensions: ['ts', 'js'],
transform: {
'^.+\\.(ts|tsx)$': 'ts-jest',
},
testEnvironment: 'node',
reporters: [
'default',
[
'../../node_modules/jest-html-reporter',
{
pageTitle: 'Unit Test Report',
outputPath: 'tests/reports/unit-test-report.html',
includeFailureMsg: true,
},
],
],
collectCoverage: true,
collectCoverageFrom: [
'../../api/**/*.ts'
],
moduleFileExtensions: ["ts", "js", "json"],
coverageDirectory: "../../coverage",
coveragePathIgnorePatterns: [
"<rootDir>/node_modules"
],
coverageReporters: [
"json",
"lcov",
"text"
],
coverageThreshold: {
"global": {
"branches": 100,
"functions": 100,
"lines": 100,
"statements": 100
}
},
};
Folder Structure
|-- app
|-- controllers
|-- schemas
|-- config
|-- jest
|-- jest_unit.config.js
|-- package.json
|-- tests
|-- api
|-- modules
|-- m1
|-- controllers
|-- m1_controller_unit.test.ts
|-- m1_controller_integration.test.ts
|-- m2
|-- models
|-- m1_model_unit.test.ts
|-- m1_model_integration.test.ts
|-- m3
|-- schemas
|-- m1_schema_unit.test.ts
|-- m1_schema_integration.test.ts
Jest Coverage htm and terminal shows no coverage lines
Upvotes: 3
Views: 6718
Reputation: 2884
Make sure your coveragePathIgnorePatterns does not have directory with tests that supposed to be cover.
Upvotes: 0
Reputation: 803
I was able to fix this issue by moving config file to root. Everything is good here in this configuration. I don't know why jest behaves like this.
Updated structure
Folder Structure
|-- app
|-- controllers
|-- schemas
|-- jest_unit.config.js
|-- package.json
|-- tests
|-- api
|-- modules
|-- m1
|-- controllers
|-- m1_controller_unit.test.ts
|-- m1_controller_integration.test.ts
|-- m2
|-- models
|-- m1_model_unit.test.ts
|-- m1_model_integration.test.ts
|-- m3
|-- schemas
|-- m1_schema_unit.test.ts
|-- m1_schema_integration.test.ts
package.json
"scripts":{
"unit-test": "jest --config='./jest_unit.config.js' --forceExit --detectOpenHandles",
}
Upvotes: 6
Reputation: 12192
I got it working with this
package.json
...
"scripts": {
...
"test": "jest --maxWorkers=1 --coverage"
...
jest.config.js
module.exports = {
verbose: true,
preset: 'ts-jest',
testEnvironment: 'node',
globals: {
'ts-jest': {
isolatedModules: true
}
},
testPathIgnorePatterns: ['.d.ts', '.js'],
collectCoverageFrom: [
'**/*.ts',
'!**/build/**',
'!**/node_modules/**',
'!**/vendor/**'
]
};
Upvotes: 1
Reputation: 17019
I'm also facing that issue randomly, I don't have a fix or know why, but clearing the cache and running it again always works:
jest --clearCache
jest --coverage
I believe this might be related to ts-jest not jest itself.
Upvotes: 0
Reputation: 1753
Try changing your collectCoverageFrom
as follows:
collectCoverageFrom: [
'../../tests/**'
],
The **
means to include all files, recursively. Details are at https://jestjs.io/docs/en/configuration#collectcoveragefrom-array
Upvotes: 1