1. Install the dependencies:
npm install jest jest-preset-angular @types/jest --save-dev
-
jest
: Core testing framework.
-
jest-preset-angular
: Adds Angular support for Jest.
-
@types/jest
: TypeScript definitions for Jest.
2. Remove Karma:
npm remove karma karma-chrome-launcher karma-jasmine karma-coverage karma-jasmine-html-reporter
3. Update test
script on package.json
file:
"scripts": {
...
"test": "jest",
4. Create jest.config.js
file:
module.exports = {
preset: 'jest-preset-angular',
setupFilesAfterEnv: ['/setup-jest.ts'],
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
transform: {
'^.+\\.ts$': 'ts-jest', // Only transform .ts files
},
transformIgnorePatterns: [
'/node_modules/(?!flat)/', // Exclude modules except 'flat' from transformation
],
};
5. Create setup-jest.ts
file:
import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone';
setupZoneTestEnv();
6. Update tsconfig.spec.json
file:
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": ["jest", "node"]
},
"include": [
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
}
7. Update the test
property in angular.json
file:
"test": {
"builder": "@angular-devkit/build-angular:jest",
"options": {
"tsConfig": "tsconfig.spec.json"
}
}
8. Verify that esModuleInterop
property is included in tsconfig.json
file:
"compilerOptions": {
"baseUrl": "./",
...
"esModuleInterop": true, // <= add it if it is not there