LoginSignup
3
2

More than 1 year has passed since last update.

はじめてのJest

Last updated at Posted at 2022-01-18

そもそもJestとは?

一番人気なJSのテストフレームワーク

https://2020.stateofjs.com/en-US/technologies/testing/

なぜ人気なのか

筆者がJestを選ぶ一番の理由は、依存が少なく高機能であることです。

↓こちら参照
https://www.codegrid.net/articles/2017-jest-1/
テストランナー、アサーション、モックが全て含まれている。
カバレッジも見ることができるらしい。 

インストール方法は?

公式からパクリ

npm i jest @types/jest ts-jest -D
  • jest
    • jestフレームワーク(これが普通jestと呼ばれるもの)
  • @types/jest
  • ts-jest
    • Jest用のTypeScriptプリプロセッサ
    • Jestはその場でTypeScriptをトランスパイルすることができるようになる
    • Babelを使っている場合は不要

設定方法は?

jest.config.jsファイルで設定する

module.exports = {
  "roots": [
    "<rootDir>/src"
  ],
  "testMatch": [
    "**/__tests__/**/*.+(ts|tsx|js)",
    "**/?(*.)+(spec|test).+(ts|tsx|js)"
  ],
  "transform": {
    "^.+\\.(ts|tsx)$": "ts-jest"
  },
}
  • roots:
    • テストファイルを配置するディレクトリ
    • テストドキュメントではプロジェクトのsrcフォルダに設定することを非常におすすめしている
    • デフォルトで設定されていた<rootDir>/testはcdkのテストファイルをおくディレクトリ
  • testMatch:
    • テストファイル名にマッチする正規表現文字列の配列
  • transform:
    • 正規表現でマッチしたファイルに対してts-jestを使うように指示
    • "^.+\\.(ts|tsx)$": "ts-jest" これだとts/tsxファイルでts-jestを使う

実行方法は?

package.jsonのスクリプトに以下を追加すると、npm run test で実行できる

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

npm run test --watchでwatchモードも可

テストファイルはどこにおけば良い?

大きく2パターンある

  1. srcディレクトリにおく
    公式がおすすめしているパターン

    メリット:テストがあるかすぐ確認できる?
    デメリット:個人的にプロジェクトとテストのディレクトリは分けたいかも、、

    └──src 
        ├── fuga
        ├── fuga.test
        ├── hoge  
        └── hoge.test 
    
    
  2. testディレクトリにおく
    メリット:スッキリしている気がする。
    デメリット:テストファイルからテスト対象ファイルをimportするときにpathが長くなる

公式がおすすめしているパターンじゃないですけど、なにか不都合なことがあるんでしょうか?
私がよく使うLambdaの場合はsrcに入れるとテストファイルまでデプロイされるのでこっち?👀

├──src 
   ├── fuga
   └── hoge
   
└──test
         ├── fuga
         └── hoge

何をテストするの?テストの単位は?

まず、前提としてテストのカバレッジを100%にする必要はない。

テストの対象となるのは、大雑把に言うと

  • なんかやばそうなところ
  • 将来変更が入りそうなところ
  • リファクタしたいところ

↓の記事が大変参考になりました。
https://qiita.com/jnchito/items/2a5d3e15761fd413657a

「テストコードがない状態だとリファクタリングできないし、リファクタリングできない状況でコードレビューしても無駄なので、まずはテストコードを書いて下さい」

肝に銘じます。

基本的にユニットテストなので、テストの単位は関数やメソッドになる。
インテグレーションテストを書くこともできる。

参考

https://typescript-jp.gitbook.io/deep-dive/intro-1/jest
https://dackdive.hateblo.jp/entry/2019/04/15/000000
https://t-yng.jp/post/tsc-and-babel

3
2
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
3
2