フロントエンド開発のためのテスト入門
モック
用語
- モック(テストダブル)
- スタブ
- 代用のため
- テスト対象に「入力」を与える
- 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: 実際のタイマーを使用する