Skip to content

leolanese/Angular-jest-angular-test-library

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4382c4a Β· Aug 18, 2021

History

22 Commits
Aug 18, 2021
Aug 13, 2021
Aug 12, 2021
Aug 18, 2021
Aug 12, 2021
Aug 12, 2021
Aug 12, 2021
Aug 12, 2021
Aug 12, 2021
Aug 12, 2021
Aug 17, 2021
Aug 17, 2021

Repository files navigation

Angular unit-test using Jest and Angular-Testing-Library

Install Angular

npm i -g @angular/cli
ng new angular-test-app
cd angular-test-app
ng serve --open

Install Angular-Testing-Library

npm i --save-dev @testing-library/angular @testing-library/jest-dom

Install Jest and Setting up Jest

// Install the needed dependencies
npm i jest @types/jest jest-preset-angular --save-dev

// or
yarn add jest jest-preset-angular @types/jest --dev

Uninstall Karma

npm uninstall karma karma-chrome-launcher karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter @types/jasmine @types/jasminewd2 jasmine-core jasmine-spec-reporter

// or
yarn remove karma karma-chrome-launcher karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter

Remove karma configuraion file

rm karma.conf.js

Remove test from angular.json

Remove the test section from angular.json, this section looks like the following:

// angular.json
"test": {
       "builder": "@angular-devkit/build-angular:karma",
       "options": {
         "main": "src/test.ts",
         "polyfills": "src/polyfills.ts",
         "tsConfig": "tsconfig.spec.json",
         "karmaConfig": "karma.conf.js",
         "assets": [
           "src/favicon.ico",
           "src/assets"
         ],
         "styles": [
           "src/styles.scss"
         ],
         "scripts": []
       }
     },
// REMOVE ALL "test" section

Remove files: karma.conf.js and src/test.ts

Create file: setupJest.ts

and Add to this file should have the following:

// setupJest.ts
import 'jest-preset-angular';
import 'jest-preset-angular/setup-jest';

Modify file: tsconfig.spec.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./out-tsc/spec",
    "types": [
      "jest",
      "node",
      "@testing-library/jest-dom"
    ],
    "esModuleInterop": true,
    "emitDecoratorMetadata": true
  },
  "files": [
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.spec.ts",
    "src/**/*.d.ts"
  ]
}

Modify file: package.json

 "scripts": {
   "test": "jest",
   "test:coverage": "jest --coverage"
 }


## Add to `package.json`

> Add Jest configuration to the end of this file

```js
"jest": {
    "preset": "jest-preset-angular",
    "setupFilesAfterEnv": [
      "<rootDir>/setupJest.ts"
    ],
    "testPathIgnorePatterns": [
      "<rootDir>/node_modules/",
      "<rootDir>/dist/"
    ],
    "globals": {
      "ts-jest": {
        "tsconfig": "<rootDir>/tsconfig.spec.json",
        "stringifyContentPathRegex": "\\.html$"
      }
    }
}

Add to: tsconfig.json

"compilerOptions": {
  "allowSyntheticDefaultImports": true,
}

Setup Angular-testing-library

// tsconfig.spec.json
// add "@testing-library/jest-dom"
"types": [
  "node",
  "jest",
  "@testing-library/jest-dom"
],

Test Jest

run the test for: src/app/app.component.spec.ts

// run ones
yarn test

// or
npx jest
// watch for changes
yarn test --watch
// watch only one
yarn test async.component.spec.ts --watch

Coverage

The coverage as built-in functionality is generated in: ./coverage directory

Demo

Jest Running

Extra note:

The .compileComponents() object is called to compile your component's resources like the template, styles, etc. You might not necessarily need to compile your component if you are using Webpack.

beforeEach(async(() => {
   TestBed.configureTestingModule({
      declarations: [
         AppComponent
      ],
   }).compileComponents(); <-- Don't need it when using WebPack
}));

πŸ’― Thanks!

Now, don't be an stranger. Let's stay in touch!

I'm a passionately curious Front-end Engineer. I like sharing what I know, and learning what I don't. London, UK.

πŸ”˜ linkedin: @LeoLaneseltd
πŸ”˜ Twitter: @LeoLaneseltd
πŸ”˜ Portfolio: www.leolanese.com
πŸ”˜ DEV.to: dev.to/leolanese
πŸ”˜ Blog: leolanese.com/blog
πŸ”˜ Questions / Suggestion / Recommendation: [email protected]

About

Angular: Angular 12 + Jest + Angular-test-library

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages