JestによるAxiosモック化方法の覚え書き


この記事について

Jestによる単体テストで、HTTPリクエスト送信ではおなじみのライブラリ・Axiosをモック化するに少々手間取ったことがあったので、その方法について記したものです。

環境情報

  • Jest: 25.1.0
  • Axios: 0.19.1

モック化の方法

シンプルなパターン

HTTPリクエストを送信するための関数(axios.post, get, put, deleteなど)は、jest.spyOnだけでモックにすることが可能です。


import axios from 'axios';

jest.mock('axios');
const postApiMock = jest.spyOn(axios, 'post').mockName('axios-post');

// モックの戻り値を適宜セット
postApiMock.mockResolvedValue({});

カスタム設定のある場合

axios.createを使うと、設定をカスタマイズしたaxiosインスタンスが取得できますが、前述の方法だけではモック化が出来なくなります(初期化処理でエラーとなります)。
そこで、インスタンスを生成するファクトリメソッド自体をモック化することで対処します。
jest.mockの第2引数についての説明は、Jestのドキュメントも参考にしてください。

const mockApi = jest.fn().mockName('mock-api');
jest.mock('axios', () => ({
  __esModule: true,
  default: {
    create: jest.fn(() => {
      return {
        interceptors: {
          request: { use: jest.fn() },
          response: { use: jest.fn() },
        },
        post: mockApi,
      };
    }),
  },
}));