Reputation: 4964
Is there a way to have code coverage in the JavaScript Jest testing framework, which is built on top of Jasmine?
The internal framework does not print out the code coverage it gets. I've also tried using Istanbul, blanket, and JSCover, but none of them work.
Upvotes: 337
Views: 630361
Reputation: 7856
I'd like to add that it may be a good idea to use the collectCoverageFrom
option. Otherwise you will get a coverage of the files with actual tests for them, excluding those files without any tests (which might not be what you want).
Of course you can and should exclude specific files where coverage is not needed, but that's a different point.
When you use this option in your configuration, you can see during test execution that coverage is also collected for untested files, e.g.:
RUNS projects/some-lib/src/lib/directives/outside-click.directive.spec.ts (7.817 s)
RUNS projects/some-lib/src/lib/components/abc-icons/abc-icons.component.spec.ts (8.644 s)
RUNS projects/some-lib/src/lib/directives/abc-badge.directive.spec.ts (8.649 s)
Running coverage on untested files...
An example jest.config.ts
would be as follows:
import type {Config} from 'jest';
const config: Config = {
preset: 'jest-preset-angular',
setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
collectCoverage: true,
collectCoverageFrom: ["./src/**"],
coverageReporters: ['html'],
coverageDirectory: './coverage'
};
export default config;
Upvotes: 3
Reputation: 431
You can run npx jest --coverage -- path/to/your/file.spec.js that will show coverage for affected files
If you want to view this in browser you can do as follows,
Then you can visually see all the coverage areas.
You can also refer to this link below, for more information https://dev.to/stevescruz/awesome-jest-tip-coverage-report-h5j
Upvotes: 15
Reputation: 3750
This works for me:
"jest": {
"collectCoverage": true,
"coverageReporters": ["json", "html"]
},
"scripts": {
"test": "jest --coverage"
},
Run:
yarn/npm test
Upvotes: 26
Reputation: 8568
For anyone looking into this question recently especially if testing using npm
or yarn
directly
Currently, you don't have to change the configuration options
As per Jest official website, you can do the following to generate coverage reports:
You must put --
before passing the --coverage
argument of Jest
npm test -- --coverage
if you try invoking the --coverage
directly without the --
it won't work
You can pass the --coverage
argument of jest directly
yarn test --coverage
Upvotes: 106
Reputation: 39
I had the same issue and I fixed it as below.
npm install --save-dev yarn
npm install --save-dev jest-cli
"jest-coverage": "yarn run jest -- --coverage"
After you write the tests, run the command npm run jest-coverage
. This will create a coverage folder in the root directory. /coverage/icov-report/index.html has the HTML view of the code coverage.
Upvotes: -13
Reputation: 791
Check the latest Jest (v 0.22): https://github.com/facebook/jest
The Facebook team adds the Istanbul code coverage output as part of the coverage report and you can use it directly.
After executing Jest, you can get a coverage report in the console and under the root folder set by Jest, you will find the coverage report in JSON and HTML format.
FYI, if you install from npm, you might not get the latest version; so try the GitHub first and make sure the coverage is what you need.
Upvotes: 7
Reputation: 876
Configure your package.json file
"test": "jest --coverage",
Now run:
yarn test
All the test will start running and you will get the report.
Upvotes: 2
Reputation: 51
If you are having trouble with --coverage not working it may also be due to having coverageReporters enabled without 'text' or 'text-summary' being added. From the docs: "Note: Setting this option overwrites the default values. Add "text" or "text-summary" to see a coverage summary in the console output." Source
Upvotes: 4
Reputation: 4466
When using Jest 21.2.1, I can see code coverage at the command line and create a coverage directory by passing --coverage
to the Jest script. Below are some examples:
I tend to install Jest locally, in which case the command might look like this:
npx jest --coverage
I assume (though haven't confirmed), that this would also work if I installed Jest globally:
jest --coverage
The very sparse docs are here
When I navigated into the coverage/lcov-report directory I found an index.html file that could be loaded into a browser. It included the information printed at the command line, plus additional information and some graphical output.
Upvotes: 399
Reputation: 3757
UPDATE: 7/20/2018 - Added links and updated name for coverageReporters.
UPDATE: 8/14/2017 - This answer is totally outdated. Just look at the Jest docs now. They have official support and documentation about how to do this.
@hankhsiao has got a forked repo where Istanbul is working with Jest. Add this to your dev dependencies
"devDependencies": {
"jest-cli": "git://github.com/hankhsiao/jest.git"
}
Also make sure coverage is enabled in your package.json jest entry and you can also specify formats you want. (The html is pretty bad ass).
"jest": {
"collectCoverage": true,
"coverageReporters": ["json", "html"],
}
See Jest documentation for coverageReporters (default is ["json", "lcov", "text"]
)
Or add --coverage
when you invoke jest.
Upvotes: 130