jestでテストを分類して個別に実行する


TL;DR

hoge.{test category}.test.tsのようにテストファイルを命名する
例. `hoge.unit.test.ts

実行時に対象ファイルを指定する

npx jest ".*\.unit\.test\.ts$"

jest.unit.config.jsのように設定ファイルを分割するのもアリ

動機

  • テストにはそれぞれ特性がある
  • 単体テストと言われるような、依存関係が少なく、高速なもの
  • 統合テストと呼ばれるような依存関係があるもの
  • DBや外部APIアクセスがあるもの
  • ビルドが必要なもの

これらを一括で実行するのは現実的ではない

対策

テストを適切に分類し、それぞれ任意のタイミングで呼び出す

案1. テストファイル名で分類する

hoge.unit.test.tsのようにファイル名にテスト分類を入れる規約を作る

  • pro: どのようなテストをするファイルかわかりやすい

案2. テスト分類ごとにディレクトリを分割する

└── __tests__
    ├── integration
    │   └─── hoge.test.ts
    └─── unit
         └─── hoge.test.ts
  • pro: testコードをプロダクトコードと分けている場合はわかりやすい
  • con: testコードをプロダクトコードと並列にしている場合は使えない

案3. テストケース名に分類を入れる

試していないが以下の方な方法もできる?

describe("unit: hogeのテスト",() => {
  expect(hoge).toBe(true);
}

備考

テストをどう分類するかについてはまた別の課題とする
動機を考えると、test sizesでの分類が適しているかもしれない

結合テストと呼ぶのをやめた話

より良い手法があればコメントください