MeWrite Docs

Jest: Mock not working

Jestモックが動作しない問題の解決方法

概要

Jestのモックが期待通りに動作せず、実際の実装が呼び出される問題です。

症状

モックしたはずの関数が実際に呼び出される

原因

  1. モック位置: jest.mockの位置が不正
  2. ESモジュール: importの巻き上げ
  3. モック対象の誤り: 間違ったモジュールパス
  4. spyOn対象: プロパティが読み取り専用

解決策

1. jest.mockはファイル先頭

1
2
3
4
5
// 正しい位置(ファイル先頭)
jest.mock('./api');

import { fetchUser } from './api';
import { UserService } from './UserService';

2. モジュール全体のモック

1
2
3
jest.mock('./api', () => ({
  fetchUser: jest.fn().mockResolvedValue({ id: 1, name: 'John' })
}));

3. 部分的なモック

1
2
3
4
jest.mock('./utils', () => ({
  ...jest.requireActual('./utils'),
  formatDate: jest.fn(() => '2025-01-01')
}));

4. spyOnの使用

1
2
3
4
5
6
7
8
9
import * as api from './api';

beforeEach(() => {
  jest.spyOn(api, 'fetchUser').mockResolvedValue({ id: 1 });
});

afterEach(() => {
  jest.restoreAllMocks();
});

よくある間違い

  • jest.mockをdescribe内に書く
  • モック関数をリセットし忘れる

Jest の他のエラー

最終更新: 2025-12-09