メインコンテンツまでスキップ

フロントエンド開発のためのテスト入門

モック

用語

  • モック(テストダブル)
    • スタブ
      • 代用のため
      • テスト対象に「入力」を与える
      • e.g. API が 500 エラーを返す場合のテスト
    • スパイ
      • 記録のため
      • テスト対象から「出力」を受け取る
      • e.g. 特定のコールバック関数が呼ばれたかどうかのテスト

Jest のモックは「テスト向けの代用実装」という意味であり、スタブとスパイの両方の意味を含むなので、上記とはややズレている

Jest

  • モックモジュール jest.mock()
    • モジュール全体をスタブに置き換える
    • 第二引数で代用実装を定義できる
    • 一部のみを書き換えたい場合はjest.requireActual()を使う
    • ESM の世界で複数のモックを使い分けたい場合は、テストファイル自体を分けるのが吉
  • モック関数 jest.spyOn()
    • jest.mock()したオブジェクトの一部をスタブに置き換える。名前とは裏腹に。
      import * as Fetchers from './fetchers';
      jest.mock('./fetchers');
      jest.spyOn(Fetchers, 'fetchUser'); // .mockResolvedValue()...などを使える
    • spyOn する部分を関数に切り出して再利用できる形にするのはおすすめ
  • モック関数 jest.fn()
    • スパイを実装する手法

時刻のテスト

  • jest.useFakeTimers: 偽のタイマーを使用する
  • jest.setSystemTime: 偽のタイマーにシステム時刻を設定する
  • jest.useRealTimers: 実際のタイマーを使用する