Jestにおけるmock・spyOnの違い

jest.png (7.1 kB)

TOC

初めてJestでテストコードを実装する時、mockspyOnの違いについて迷う事があったので、備忘録として記事に残しておこうと思います。

mock(モック)

モックはテストの中で外部モジュールや関数を代替するためのもので、実際の処理を行わずに指定した値を返したり、特定のエラーをスローすることができます。モックは通常、外部の依存関係を持つ部分をテストする際に、その外部の動作をコントロールしたいときに使用します。

モックの特徴

  • 実際の処理は行われず、代わりにモックが設定された動作をします。
  • 呼び出しの回数や引数など、どのようにモックが使用されたかを検証することができます。

jest.mock('./externalModule', () => {
  return {
    externalFunction: jest.fn().mockReturnValue('mockedValue')
  };
});

spyOn(スパイ)

spyOnは既存の関数の呼び出しを監視します。spyOnを使用すると、関数がどのように呼び出されたか、何回呼び出されたかなどの情報を取得できるようになります。しかし、spyOnそのものは関数の動作を変更しません。動作の変更をしたい場合は、mockReturnValuemockImplementationなどの追加のメソッドを使用します。

スパイの特徴

  • 元の関数の呼び出しを監視します。
  • 呼び出しの情報を取得できますが、動作は変更しません(追加のメソッドで変更可能)。

const obj = {
  myFunction: () => 'originalValue'
};

const spy = jest.spyOn(obj, 'myFunction');
obj.myFunction();
expect(spy).toHaveBeenCalled();

まとめ

  • mockは外部の動作を完全にコントロールするためのもので、実際の処理は行われません。
  • spyOnは既存の関数の呼び出しを監視し、その情報を取得するためのものです。
CONTACT
© 2023, Kakkiii All Rights Reserved.