SAKURUG TECHBLOG

【Jest】モック関数の使い分け - fn, mock, spyOnの違いを解説

timestampauthor-name
Toki

はじめに

今回は【Jest】のモック関数の使い分けについてご紹介いたします!

この記事を読んで欲しい人

Jestのモック関数の使い分けに不安がある方

Jestのモック関数とは?

Jestのモック関数は、テストを書く際の強力な味方です。これらの関数を使うことで、複雑な処理や外部との連携を簡単に模倣し、テストを効率的に行うことができます。主に以下の3つのモック関数があります:

  1. jest.fn()
  2. jest.mock()
  3. jest.spyOn()

これらの関数の特徴と使い分けを、初心者の方にもわかりやすく解説していきます。

モック関数の比較表

特徴

jest.fn()

jest.mock()

jest.spyOn()

用途

単一の関数をモック

モジュール全体をモック

既存のメソッドを監視・モック

スコープ

関数レベル

モジュールレベル

オブジェクトのメソッドレベル

元の実装の保持

×

×

呼び出し情報の記録

使いやすさ

簡単

やや複雑

中程度

この表を参考に、それぞれのモック関数の詳細を見ていきましょう。

jest.fn():シンプルで柔軟なモック関数

jest.fn()は、最も基本的なモック関数です。単一の関数をモック化する際に使用します。

基本的な使い方

const mockFunction = jest.fn();

この例では、mockFunctionは、呼び出されると自動的に呼び出し情報を記録します。

戻り値の設定

const mockFunction = jest.fn().mockReturnValue('Hello, Jest!');

この例では、mockFunctionを呼び出すと常に「Hello, Jest!」を返します。

いつ使うべき?

  • 単一の関数をモック化したい時
  • テスト内でコールバック関数が必要な時
  • 関数の呼び出し回数や引数を確認したい時

jest.fn()は、シンプルで柔軟性が高いため、多くの場面で活躍します。

jest.mock():モジュール全体をモック化

jest.mock()は、モジュール全体をモック化する際に使用します。外部ライブラリや複雑な依存関係を持つモジュールをテストする際に特に有用です。

基本的な使い方

jest.mock('./myModule');

この呼び出しにより、./myModuleのすべてのエクスポートがモック関数に置き換えられます。

部分的なモック化

jest.mock('./myModule', () => ({ ...jest.requireActual('./myModule'), specificFunction: jest.fn(), }));

この例では、specificFunctionのみをモック化し、他の関数は元の実装を保持します。

いつ使うべき?

  • 外部ライブラリの振る舞いを制御したい時
  • モジュール全体の振る舞いを変更したい時
  • 複数の関連する関数を一度にモック化したい時

jest.mock()は、大規模なモック化が必要な場合に威力を発揮します。

jest.spyOn():既存のメソッドを監視・モック化

jest.spyOn()は、既存のオブジェクトのメソッドを監視し、必要に応じてモック化する機能を提供します。

基本的な使い方

const spy = jest.spyOn(console, 'log');

この例では、console.logの呼び出しを監視します。

モック化と元に戻す

const spy = jest.spyOn(console, 'log').mockImplementation(() => {});

この例では、console.logをモック化し、テスト後に元の実装に戻しています。

いつ使うべき?

  • 既存のメソッドの呼び出しを追跡したい時
  • 一時的にメソッドの振る舞いを変更したい時
  • テスト後に元の実装に戻したい時

jest.spyOn()は、既存のコードに最小限の変更を加えてテストしたい場合に適しています。

補足

Jset公式ドキュメント-mock関数

まとめ

Jestのモック関数は、それぞれ異なる用途に適しています。

  • jest.fn(): シンプルで柔軟な単一関数のモック化
  • jest.mock(): モジュール全体の包括的なモック化
  • jest.spyOn(): 既存メソッドの監視と一時的なモック化

これらの特徴を理解し、適切に使い分けることで、より効果的で保守性の高いテストコードを書くことができます。初心者の方は、まず

jest.fn()から始めて、徐々に他のモック関数の使用方法を学んでいくことをおすすめします。Jestのモック機能を活用することで、テストの品質が向上し、結果としてソフトウェア全体の信頼性が高まります。モック関数の使い方を習得し、実践することで、より堅牢なJavaScriptアプリケーションの開発が可能になるでしょう。

ここまでご覧いただきありがとうございます!

是非、他の記事もご覧ください !

記事をシェアする

ABOUT ME

author-image
Toki
2024年新卒入社。フロントエンド開発をメインにNuxt3やTypeScriptのキャッチアップを行っています。