13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

既存のAngularプロジェクトにJestを導入する方法

Last updated at Posted at 2018-11-30

先日bitbank LT Nightで発表をきいてからJestの単体テストに興味津々になったのでJestを入れてみました。あっちを見たりこっちを見たりしたので備忘を兼ねて手順をまとめてみます。淡々と自分の行った手順をまとめていきます。

参考にしたあっちやこっちは以下のとおりです。

jest-schematicを利用してng add @briebug/jest-schematicでも導入できるのですが、私の場合jasmineを消してしまいたくなかったのでこの方法を使いました。

1. 必要なパッケージのインストール

npm i -D @types/jest jest jest-preset-angular

2. package.jsonの修正

"scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "test": "jest",
    "test:watch": "jest --watch"
  },
  "jest": {
    "preset": "jest-preset-angular",
    "setupTestFrameworkScriptFile": "<rootDir>/src/jest.ts"
  }

私の場合はtestを書き換えてtest:watchとjest以下を足しました。setupTestFrameworkScriptFileはこのあと作成するファイルの置き場を書いているだけなので指定と違う場所におきたかったら適宜編集すればOKです。

3. jest.tsを作成する

import 'jest-preset-angular';  
import './jest-global-mocks';  

以上の内容を記載したjest.tsを作ります。ファイル名は2で指定したものと同じであればなんでも大丈夫です。今回はjest.tsにします。

4. jest-global-mocks.tsを作成する

こちらは特別中身を触りたいとき以外は公式の例をコピっておけば大丈夫とのことなので最初にインストールした@jest-preset-angularのレポジトリにあるjestGlobalMocks.tsの中身をそのまま持ってきてはります。特に設定を触っていない限りjest.tsと同じディレクトリに作ります。

5. tsconfig.spec.jsonを編集する

(おそらく大概の場合)すでにtsconfig.spec.jsonが存在するのでその内容を書き換えるだけで良いです。

  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/spec",
    "baseUrl": "./",
    "module": "commonjs",
    "target": "es5",
    "types": [
      "jest",
      "node"
    ]
  },
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts"
  ]

私が書き換えたのはtypesのjasmineをjestに変えたくらいだったと思います。tsconfig.spec.jsonが見つからないよ!と言われてしまった場合は@jest-preset-angularのREADMEのExposed Configurationにあるようにpackage.jsonの"jest"以下に

"globals": {
    "ts-jest": {
      "tsConfigFile": "src/tsconfig.spec.json"
    },
    "__TRANSFORM_HTML__": true
  },

を追加し、tsConfigFileのところを実際のパスに合わせてあげれば大丈夫です。他に設定を触りたい場合もここを参考にすると良いと思います。

ここまでで、npm testを実行するとjestが走るようになっているはずです。

6. angular.jsonを編集する

私の場合、このあと変更をpushしたときに"ng test"がコケるという理由でパイプラインがfailになったのでangular.jsonを編集する必要がありました。
angular.jsonの"projects">"project-name">"architect">"test">"builder"がデフォルトでは

karma
```になっているので
```"builder": "@angular-builders/jest:run"
```に書き換えます。
このあと確認で"ng test"を走らせたところ、```@angular-builders```がないよ!といわれたので```npm i -D @angular-builders```しました。これで"ng test"でもJestが走るようになり、無事導入完了です!
サクサクとテストが実行できます:hatching_chick:
13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?