mcpField
A
api-testing

api-testing

github.com/oakossテスト・品質20137 回インストール11 週間前に更新
リポジトリ

api-testing について

HTTP エンドポイントの検証や外部サービスのモックに使う API テストスキルです。Supertest による統合テストと MSW によるネットワークレベルのリクエスト捕捉を扱い、レスポンス検証、スキーマ確認、エラーケースにも対応します。

主な機能

  1. 01Supertest によるエンドポイントテスト
  2. 02MSW による HTTP・GraphQL モック
  3. 03ステータス、ヘッダー、本文の検証
  4. 04レスポンススキーマの検証
  5. 05Cookie 維持とフレームワーク用テストクライアント

活用シーン

  1. 01REST API の統合テスト
  2. 02リクエストとレスポンスの契約検証
  3. 03テストでのサードパーティサービスのモック
  4. 04エラーレスポンスと境界ケースの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill api-testing

インストール後、Claude Code で/api-testingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
assertion-patterns.md
msw-handlers.md
supertest-patterns.md
test-organization.md

詳細

API テスト

概要

API テストでは、リクエストを送信してレスポンスを検証し、HTTP エンドポイントのステータスコード、ヘッダー、本文の内容、エラー処理を確認します。Supertest は、実際のサーバーを起動せずに Express、Fastify、Hono アプリを対象とした統合テストを実行できる、流暢なチェーン可能 API を提供します。MSW(Mock Service Worker)v2 は、ネットワークレベルで送信 HTTP リクエストをインターセプトし、Node.js のテストとブラウザー環境の両方で外部サービスを現実的にモックできます。

使用する場面: REST API の統合テスト、ミドルウェアパイプラインのテスト、リクエスト/レスポンスの契約の検証、テストでのサードパーティ API のモック、エラー処理やエッジケースのテスト。

使用しない場面: 純粋関数の単体テスト(直接アサーションを使用)、E2E ブラウザーテスト(Playwright/Cypress を使用)、負荷/パフォーマンステスト(k6/Artillery を使用)、静的ファイル配信のテスト。

クイックリファレンス

パターンAPI主なポイント
GET リクエストrequest(app).get('/path')supertest の Test オブジェクトを返します
本文付き POSTrequest(app).post('/path').send(body)Content-Type を自動的に設定します
認証ヘッダー.set('Authorization', 'Bearer token').expect() の前にチェーンします
ステータスのアサーション.expect(200)本文のアサーションとチェーンできます
本文のアサーション.expect({ key: 'value' })深い等価性をチェックします
ヘッダーのアサーション.expect('Content-Type', /json/)文字列または正規表現を受け付けます
MSW HTTP ハンドラーhttp.get('/api/users', resolver)一致するリクエストをインターセプトします
MSW GraphQL ハンドラーgraphql.query('GetUser', resolver)オペレーション名でインターセプトします
MSW レスポンスHttpResponse.json(data, { status })v2 のレスポンス形式
MSW エラーのシミュレーションHttpResponse.error()ネットワーク障害をシミュレートします
MSW の一度限りのハンドラーhttp.get(path, resolver, { once: true })最初の一致後に自動的に削除されます
テストごとの MSW 上書きserver.use(handler)特定のテストでデフォルトのハンドラーを上書きします
スキーマ検証schema.parse(response.body)Zod でレスポンスの構造を検証します
Cookie の保持const agent = request.agent(app)リクエスト間で Cookie を保持します
Fastify の injectapp.inject({ method, url })supertest を使わない組み込みのテスト機能
Hono テストクライアントtestClient(app)型安全なリクエストビルダー

よくある間違い

間違い正しいパターン
supertest のリクエストを await しない常に await request(app).get('/path') を使用する
テスト間でサーバーの状態を共有するafterEach で server.resetHandlers() を呼び出してハンドラーをリセットする
fetch/axios を直接モックするMSW を使ってネットワークレベルでインターセプトする
セットアップで server.listen() を忘れるbeforeAll で呼び出し、afterEach で resetHandlers を呼び出す
Fastify インスタンスを supertest に渡すfastify.server(基盤となる Node サーバー)を使用する
レスポンスの完了前にアサーションするawait を使うか、supertest のチェーンを返す
多くのテストでテストデータをハードコードするテストデータにはファクトリーまたはフィクスチャを使う
エラーレスポンスをテストしない成功パスと併せて 4xx および 5xx のパスもテストする
afterEach で server.close() を使うclose には afterAll を使い、afterEach ではリセットのみ行う
アサーションでレスポンスヘッダーを無視するContent-Type、Cache-Control、CORS ヘッダーを検証する
onUnhandledRequest: 'error' を使わない未処理のリクエストを検出し、テストの抜け漏れを防ぐ
動作ではなく実装をテストする内部関数の呼び出しではなく、レスポンスの形式を検証する

委任

  • テスト構成のレビュー:Task エージェントを使用します
  • コードレビュー:code-reviewer エージェントに委任します
  • パターンの調査:Explore エージェントを使用します

vitest-testing スキルが利用可能な場合は、Vitest の一般的な設定とパターンを委任します。 それ以外の場合は、次を推奨します:npx skills add oakoss/agent-skills --skill vitest-testing

参考資料

コメント