自動テストにおけるAPIモック:ユニット/結合/E2Eを高速化する方法

#モックAPI テスト#Jest モックAPI#Cypress モックAPI#フロントエンド API テスト#E2E テスト モックAPI

自動テストにおける API モック:ユニット/結合/E2E を高速化

モダンなアプリは API に大きく依存します。しかし自動テストで実 API に依存すると、遅延・不安定・想定外の失敗を招きがちです。

そこで役立つのが モック API。バックエンドなしでも、予測可能・高速・隔離されたレスポンスでテストを実行できます。

本記事では MockApiHub をテストワークフローに組み込む方法を、Jest(ユニット)Cypress(結合/E2E)、**Playwright(ブラウザ E2E)**の順に解説します。


なぜテストでモック API を使うのか

  • 安定性:ネットワーク障害やバックエンド停止によるフレークを排除
  • 🚀 速度:モックは即応答、テスト時間を短縮
  • 🧪 制御:エッジケースを自在に再現
  • 🔁 再現性:同じ入力 → 毎回同じ出力(決定論的)

ユニットテスト(Jest)

ユニットでは関数のモックが基本ですが、コンポーネントが API フェッチするなら、モックエンドポイントを指すのが手軽です。

TSX
import { render, screen } from "@testing-library/react";
import Users from "../components/Users";

describe("UserList component", () => {
it("renders mock API data", async () => {
// Mock fetch to return data from MockApiHub
global.fetch = jest.fn(() =>
Promise.resolve({
json: () =>
Promise.resolve([
{ id: 1, name: "Alice", email: "alice@example.com" },
{ id: 2, name: "Bob", email: "bob@example.com" },
]),
})
) as jest.Mock;

  render(<Users />);

  expect(await screen.findByText("Alice")).toBeInTheDocument();
  expect(await screen.findByText("Bob")).toBeInTheDocument();

});
});

インラインでモックする代わりに、決定論的なレスポンスを返す https://mockapihub.com/api/users を使う方法もあります。


結合/E2E テスト(Cypress)

Cypress はネットワークリクエストのスタブが簡単です。モック API に直接向けることもできます。

JS
// cypress/e2e/userlist.cy.js
describe("User List Page", () => {
it("shows users from a mock API", () => {
  cy.visit("/users");

  // Mock network response with Cypress intercept
  cy.intercept("GET", "/api/users", {
    fixture: "users.json",
  });

  cy.contains("Alice").should("exist");
  cy.contains("Bob").should("exist");

});
});

ライブなモックデータを使いたい場合:

JS
cy.intercept("GET", "/api/users", { url: "https://mockapihub.com/api/users" });

ブラウザ E2E(Playwright)

Playwright でもリクエストをインターセプトできます。

JS
// tests/userlist.spec.ts
import { test, expect } from "@playwright/test";

test("shows users from mock API", async ({ page }) => {
await page.route("**/api/users", async (route) => {
const mockResponse = [
{ id: 1, name: "Charlie", email: "charlie@example.com" },
{ id: 2, name: "Dana", email: "dana@example.com" },
];
await route.fulfill({ json: mockResponse });
});

await page.goto("http://localhost:3000/users");

await expect(page.locator("text=Charlie")).toBeVisible();
await expect(page.locator("text=Dana")).toBeVisible();
});

モック API テストのベストプラクティス

  • モックレスポンスはfixtures(JSON)に集約して再利用
  • ハッピーパスとエッジケースの両方を検証
  • まずは MockApiHub で迅速に整備 → 本番直前に実 API へ切替
  • どのテストがモック/実 APIかをドキュメント化

まとめ

モック API はプロトタイピングだけではありません。自動テストの生産性を大きく引き上げる武器です。
Jest/Cypress/Playwright のいずれでも、モックを使えばテストは高速・安定・再現可能になります。

👉 いますぐ MockApiHub Playground で試し、決定論的な API レスポンスをワークフローに組み込みましょう。

自動テストにおけるAPIモック:ユニット/結合/E2Eを高速化する方法 — MockApiHub