5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事では、Playwright で API を Mock する方法を記載します。

開発環境

開発環境は以下の通りです。

  • Windows 11
  • Next.js 14.2.13
  • React 18.3.1
  • TypeScript 5.6.3
  • SWR 2.2.5
  • Playwright 1.48.2

テスト対象コード

ジョークを取得する API を実行して、その結果を表示するコードを実装します。
今回 API の呼び出しは fetch と SWR を利用しています。

page.tsx
"use client";

import useSWR from "swr";

const fetcher = async (url: string) => {
  const res = await fetch(url);
  return await res.json();
};

export default function Page() {
  const { data } = useSWR<{
    id: number;
    type: string;
    setup: string;
    punchline: string;
  }>("https://official-joke-api.appspot.com/random_joke", fetcher);

  return (
    <div>
      <h3>{data?.type}</h3>
      <p>{data?.setup}</p>
      <p>{data?.punchline}</p>
    </div>
  );
}

image.png

テストコードの実装

API を Mock して、その結果を確認するテストコードを実装します。
API のルーティングの Mock は page.route というメソッドを利用します。第一引数で Mock するルートを記載します。第二引数で、fulfill というメソッドを利用してレスポンスを Mock します。

page.spec.ts
import test, { expect } from "@playwright/test";

test("API response should be displayed as expected", async ({ page }) => {
  // Mock the api call before navigating
  await page.route(
    "https://official-joke-api.appspot.com/random_joke",
    async (route) => {
      const json = {
        id: 8,
        type: "general",
        setup: "How many lips does a flower have?",
        punchline: "Tulips",
      };
      await route.fulfill({ json });
    }
  );

  // Go to the page
  await page.goto("http://localhost:3000");

  // API response is visible
  await expect(page.getByRole("heading", { name: "general" })).toBeVisible();
  await expect(
    page.getByText("How many lips does a flower have?")
  ).toBeVisible();
  await expect(page.getByText("Tulips")).toBeVisible();
});

参考

5
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?