🎯 3.3 モック(mock)とスパイ(spy)の基本


✅ 【要点】

💡 「本物の関数は動かさない。でも呼び出しだけチェックしたい」ときに使う。


🛠️ 【なぜ使う?】

👉 テスト結果を安定させるため

👉 副作用を防ぐため(データ更新やAPI通信をさせない)


🟢 【Jestのモック関数の作り方】

// モック関数を作成
const mockFn = jest.fn();

// 呼び出し
mockFn('apple');
mockFn('banana');

// 呼び出された回数を確認
expect(mockFn).toHaveBeenCalledTimes(2);

// 最初の呼び出しの引数が 'apple' か?
expect(mockFn).toHaveBeenCalledWith('apple');


🔥 【スパイ(spy)の作り方】

// オブジェクトのメソッドをスパイ(監視)する
const calculator = {
  add: (a: number, b: number) => a + b,
};

// calculator.addを監視
const spy = jest.spyOn(calculator, 'add');

// 実際に呼び出す
calculator.add(1, 2);

// 呼び出されたか確認
expect(spy).toHaveBeenCalled();
expect(spy).toHaveBeenCalledWith(1, 2);

// スパイを解除
spy.mockRestore();

💡 jest.spyOn → 元の関数はそのまま動くけど、呼び出し記録だけする。