Angular 設置 Jest 環境
Jest 是什麼?
Jest 是一套很多人使用的 Javascript 測試框架 由 Facebook 所開發支援 Vue, React, Angular, Node.js, Typescript, Svelte 等等
環境設置
Step1. 移除 Karma
移除 Angular 預設的測試框架 Karma
npm remove karma karma-chrome-launcher karma-coverage karma-jasmine karma-jasmine-html-reporter
rm ./karma.conf.js ./src/test.ts
Step2. 安裝 Jest
jest主要函式庫jest-preset-angular幫助我們在 Angular 中設定 Jest 環境@types/jest讓我們能在 Typescript 中看到可用的語法@angular-builders/jest讓我們能透過ng test來運行 jest
npm install -D jest jest-preset-angular @types/jest @angular-builders/jest
Step3. 創建 jest.config.js
新增 jest 主要設定檔內容
module.exports = {
preset: "jest-preset-angular",
setupFilesAfterEnv: ["<rootDir>/setup-jest.ts"],
globalSetup: "jest-preset-angular/global-setup",
};
Step4. 創建 setup-jest.ts
新增 jest-preset-angular 環境設定檔內容
import "jest-preset-angular/setup-jest";
Step5. 修改 tsconfig.spec.json
typescript 編譯設定檔內容
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"module": "CommonJs",
"types": ["jest"],
"emitDecoratorMetadata": true
},
"include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
}
Step6. 修改 angular.json
angular 專案設定檔內容
"test": {
"builder": "@angular-builders/jest:run",
"options": {
"polyfills": [ "src/polyfills.ts" ],
"tsConfig": "tsconfig.spec.json",
"inlineStyleLanguage": [ "scss" ],
"assets": [ "src/favicon.ico", "src/assets" ],
"styles": [ "src/styles.scss" ],
"scripts": []
}
}
Step7. 安裝 Jest vscode extension (optional)
若使用 vscode,可以安裝vscode-jest有更好的測試體驗
Step8. 在 package.json 加入指令
"test": "ng test",
"testw": "ng test --watch-all",
"coverage": "ng test --coverage"