Apidog

オールインワン協働API開発プラットフォーム

API設計

APIドキュメント

APIデバッグ

APIモック

API自動テスト

初心者向け:JestでAPIモックテストを完璧にマスターする方法

この記事では、Jestを使用してAPIコールのモックテストを行う重要性を説明しています。jest.mock()やaxios-mock-adapterなどのツールを活用し、外部依存を管理しながら独立性の高いテストが可能です。これにより、強固なコードテストを実現します。

中村 拓也

中村 拓也

Updated on 11月 12, 2024

API呼び出しを行うコードのテストを書くときは、テストが信頼性が高く、迅速で、外部サービスに依存しないように、これらの呼び出しをモックすることが重要です。人気のJavaScriptテストフレームワークであるJestは、テスト内でAPI呼び出しを簡単にモックするためのいくつかの方法を提供しています。さまざまなアプローチを詳しく見ていきましょう。

💡
あらゆるアプリケーションでAPIをモックすることができますが、Apidogという最良のAPIプラットフォームを使用することを検討すべきです!

Apidogは、APIライフサイクル全体にわたって開発者に高品質の機能を提供する包括的なローコードAPIプラットフォームです。自動コード生成、CI/CD統合、カスタマイズ可能なスクリプトなどの追加ツールを備え、一つのプラットフォーム内でプロフェッショナルなAPI開発を体験してください!

Apidogについてもっと知りたい方は、下のボタンをクリックしてください!

jest.mock()を使用する

JestでAPI呼び出しをモックする方法の一つは、APIリクエストを行うモジュール全体をモックするためにjest.mock()関数を使用することです。以下はその例です:

// api.js
import axios from 'axios';

export const getUsers = () => {
  return axios.get('/users');
};
// api.test.js
import axios from 'axios';
import { getUsers } from './api';

jest.mock('axios');

test('getUsersはAPIからデータを返します', async () => {
  const users = [{ id: 1, name: 'John' }];
  axios.get.mockResolvedValueOnce({ data: users });
  
  const result = await getUsers();
  
  expect(axios.get).toHaveBeenCalledWith('/users');
  expect(result.data).toEqual(users);
});

この例では、jest.mock('axios')を使用してaxiosモジュール全体を自動的にモックします。そして、次のaxios.get呼び出しのレスポンスをモックするためにaxios.get.mockResolvedValueOnce()を使用します。テストはAPIが正しく呼び出され、モックデータを返すことを確認できます。

手動モックを使用する

もう一つのアプローチは、__mocks__フォルダーを作成し、その中にモック実装ファイルを入れることによって、API呼び出しを行うモジュールを手動でモックすることです:

// __mocks__/axios.js
export default {
  get: jest.fn(() => Promise.resolve({ data: {} })),
  post: jest.fn(() => Promise.resolve({ data: {} })),
  // ...
};

これで、テスト内で各テストのために異なるレスポンスをモックすることができます:

// api.test.js
import axios from 'axios';
import { getUsers } from './api';

jest.mock('axios');

test('getUsersはAPIからデータを返します', async () => {
  const users = [{ id: 1, name: 'John' }];
  axios.get.mockResolvedValueOnce({ data: users });
  
  const result = await getUsers();
  
  expect(axios.get).toHaveBeenCalledWith('/users');
  expect(result.data).toEqual(users);
});

この手動モックを使用すると、getpostなどの異なるAxiosメソッドを独自の実装でモックすることができます。

Axios-mock-adapterを使用する

このライブラリを使用すると、Axiosリクエストをより高度にモックできます。まず、インストールします:

npm install axios-mock-adapter --save-dev

次に、テスト内で:

// api.test.js
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import { getUsers } from './api';

describe('getUsers', () => {
  let mock;
  
  beforeAll(() => {
    mock = new MockAdapter(axios);
  });
  
  afterEach(() => {  
    mock.reset();
  });
  
  test('ユーザーデータを返す', async () => {
    const users = [{ id: 1, name: 'John' }];
    mock.onGet('/users').reply(200, users);
    
    const result = await getUsers();
    
    expect(result.data).toEqual(users);  
  });
});

axios-mock-adapterを使用すると、URL、パラメーター、ヘッダーなどに基づいてリクエストをモックできます。エラーやタイムアウトのシミュレーションも可能です。

モックされたAxiosインスタンスを注入する

コードが直接axiosを使用している場合、もう一つの選択肢は、テスト中にモックされたaxiosインスタンスをコードに注入することです:

// api.js
import axios from 'axios';

export const getUsers = () => {
  return axios.get('/users');
};
// api.test.js
import axios from 'axios';
import { getUsers } from './api';

jest.mock('axios', () => ({
  get: jest.fn(),
}));

test('getUsersはAPIからデータを返します', async () => {
  const users = [{ id: 1, name: 'John' }];
  axios.get.mockResolvedValueOnce({ data: users });
  
  const result = await getUsers();
  
  expect(axios.get).toHaveBeenCalledWith('/users');
  expect(result.data).toEqual(users);
});

ここでは、axios自体をモックしており、全体のモジュールをモックするのではなく、独自のモックされたget関数を提供します。

API呼び出しをモックするためのヒント

ここでは、JestでAPI呼び出しをモックする際に考慮すべきいくつかのヒントを紹介します:

  • beforeEachおよびafterEachを使用して、テスト間でモックをリセットし、独立したテストを保証します
  • あまりモックしすぎない - 実際にコードで使用する関数とモジュールだけをモックします
  • エラーや予期しないレスポンスをモックして、失敗ケースもテストします
  • 一般的なAPIレスポンスのために再利用可能なモックフィクスチャを作成することを検討します

ApidogでAPIをモックする

異なるAPI開発体験を試してみたい場合は、Apidogの使用を検討してください!

apidogクライアント
button

Apidogは、API開発のためのシンプルで直感的なユーザーインターフェースを提供するローコードAPIプラットフォームです。Apidogを使用すれば、APIを構築、テスト、モック、ドキュメント化できます。Apidogを詳しく見てみましょう!

Apidogスマートモック

apidog-モック設定

明確なモックルールがない場合、Apidogが手動設定なしにリアルなモックデータを自動生成します。

Apidogアドバンスドモック

apidog-モック新規作成
button

クライアントとサーバー間のリアルなインタラクションをシミュレートするために、カスタムスクリプトを使用してAPIレスポンスを変更します。

Apidogクラウドモック

Apidogクラウドモック

クラウドモック機能を使用して、固定アドレスを通じてチームとコラボレーションします。クラウドモックサーバーでアクセス可能です。

結論

モックは、特にAPI呼び出しのような外部依存関係を扱う際に、良いテストを書くための基本的なスキルです。Jestは、jest.mock()を使用してモジュール全体をモックしたり、モジュールを手動でモックしたり、axios-mock-adapterのようなライブラリを使用してより高度なケースでAPI呼び出しをモックするための多くの方法を提供しています。重要なのは、テストが独立しており、テストされるコードに焦点を当てるために、ニーズに合った正しいアプローチを選択することです。これらのモッキング手法をツールベルトに取り入れれば、APIに依存するコードのためのレジリエントなテストを書くことができます。

Markdown変換革命:MarkItDown MCPで始めるIT業界の新常識観点

Markdown変換革命:MarkItDown MCPで始めるIT業界の新常識

MarkItDown MCPは多様なファイル形式を効率的にMarkdownへ変換できるAPI駆動のツールです。IT業界の作業効率化と自動化に最適。

中村 拓也

4月 21, 2025

Skywork-OR1-32B: Deepseek R1に迫るオープンソース最上位モデル観点

Skywork-OR1-32B: Deepseek R1に迫るオープンソース最上位モデル

2025年4月13日、SkyworkAIはSkywork-OR1(Open Reasoner 1)シリーズをリリースしました。このシリーズには3つのモデルが含まれます:Skywork-OR1-Math-7B、Skywork-OR1-7B-Preview、そしてSkywork-OR1-32B-Previewです。 * これらのモデルは、数学的推論能力とコード推論能力に特化した大規模なルールベースの強化学習を用いてトレーニングされています。 * モデルはDeepSeekの蒸留アーキテクチャを基盤として構築されています:7BバリアントはDeepSeek-R1-Distill-Qwen-7Bをベースとしており、32BモデルはDeepSeek-R1-Distill-Qwen-32Bをベースとしています。 💡美しいAPIドキュメントを生成する素晴らしいAPIテストツールが欲しいですか? 開発チームが最大の生産性で一緒に作業するための統合型オールインワンプラットフォームが欲しいですか? Apidogはすべての要求を満たし、より手頃な価格でPostmanを置き換えます!ボタン Sky

中村 拓也

4月 13, 2025

2025年の30のベストPostman代替ツール | 無料でオープンソースのAPIテストツール観点

2025年の30のベストPostman代替ツール | 無料でオープンソースのAPIテストツール

Postmanは長い間、API開発のための定番ツールとして広く利用されており、API設計、テスト、およびドキュメント作成を提供しています。これにより、ソフトウェア業界でほぼ10年間普遍的な存在となっています。 しかし、2021年にPostmanが大幅な料金プランの変更を実施したことで、その優位性が揺らぎました。無制限ユーザーライセンスを廃止し、ユーザーごとの月額料金に移行したことが多くの開発者に影響を与え、無料でオープンソースの、コスト効率の良いPostmanの代替ツールを探す動きが加速しました。 幸運なことに、APIツールの景観は大いに広がり、機能が豊富で無料またはオープンソースのAPIテストツールが溢れています。この記事では、これらの機能、利点、欠点について包括的に説明します。 なぜユーザーはPostmanから離れているのか? Postmanは数年間、API開発およびテストのための定番ツールでした。しかし、多くのユーザーにとって、その無料プランの制約が致命的な問題となります — 特にプロジェクトが拡大し、チームが成長するにつれて。以下はユーザーが代替手段を探す理由です:

Oliver Kingsley

4月 11, 2025