Node.js HTTP API テスト: Supertest 活用ガイド

Oliver Kingsley

Oliver Kingsley

14 8月 2025

Node.js HTTP API テスト: Supertest 活用ガイド

急速に進化するAPIの状況において、チームには2つのものが必要です。コードレベルでの迅速なフィードバックと、環境全体にわたる信頼性の高いエンドツーエンドの検証です。Supertestは、その最初のもの、つまりNode.jsサービス向けの超高速HTTPアサーションを提供します。そして、役割を超えて協力し、シナリオテストを実行し、依存関係をモックし、ドキュメントを公開する準備ができたとき、ApidogのようなAPIテストプラットフォームが全体像を完成させます。この公式かつ客観的なガイドでは、Supertestを使用してAPIをテストする方法、その優れた点、そしてApidogと組み合わせて自信を持ってデリバリーを加速する方法を説明します。

Apidog
ボタン

Supertestとは?

Supertestは、HTTPサーバーをテストするための軽量なNode.jsライブラリです。superagentをベースにしており、外部クライアントを起動することなく、ステータスコード、ヘッダー、レスポンスボディに対して表現力豊かなアサーションを記述できます。次のような場合に理想的です。

コラボレーション、APIコンプライアンスガバナンス、環境オーケストレーション、およびビジュアルテストが必要な場合は、ApidogのようなAPIテストプラットフォームでSupertestを補完します。この記事の残りの部分では、両方を行う方法を示します。

ボタン

Supertestのインストールとセットアップ

Supertestは数分でインストールできます。npm、pnpm、またはyarnを使用してください:

# npm   npm install --save-dev supertest jest

# pnpm  pnpm add -D supertest jest

# yarn

yarn add -D supertest jest

最小限のExpress API (app.js):

const express = require('express');

const app = express();



app.get('/greet', (req, res) => {

  const name = req.query.name || 'World';

  res.json({ message: `Hello, ${name}!` });

});



module.exports = app;

Supertest + Jest を使用したシンプルなテスト (app.test.js):

const request = require('supertest');

const app = require('./app');



describe('GET /greet', () => {

  it('greets anonymously', async () => {

    const res = await request(app)

      .get('/greet')

      .expect('Content-Type', /json/)

      .expect(200);



    expect(res.body.message).toBe('Hello, World!');

  });



  it('greets by name', async () => {

    const res = await request(app)

      .get('/greet?name=Alice')

      .expect('Content-Type', /json/)

      .expect(200);



    expect(res.body.message).toBe('Hello, Alice!');

  });

});

テストを実行するために package.json を更新します:

{

  "scripts": {

    "test": "jest"

  }

}

テストを実行します:

npm test

MochaやVitestを好む場合でも、Supertestは同じように動作します — .expect() APIは同一です。


優れたSupertestアサーションの記述

Supertestの力は、そのチェーン可能なアサーションにあります — 記述が迅速で、読みやすいです。ここでは、日常的に使用するパターンを紹介します:

request(app)

  .get('/users')

  .expect(200)

  .expect('Content-Type', /json/);
request(app)

  .get('/users')

  .expect(200)

  .expect(res => {

    if (!Array.isArray(res.body)) throw new Error('Expected an array');

    if (res.body.length === 0) throw new Error('Expected at least one user');

  });
request(app)

  .get('/health')

  .expect(200)

  .expect({ status: 'ok' });



request(app)

  .get('/health')

  .expect(200)

  .expect(/"status":"ok"/);
request(app)

  .post('/posts')

  .set('Authorization', 'Bearer test-token')

  .send({ title: 'Hello', body: 'World' })

  .expect(201)

  .expect(res => {

    if (!res.body.id) throw new Error('Missing id');

  });
const agent = request.agent(app);

await agent.get('/login').expect(200);

await agent.get('/me').expect(200).expect(res => {

  if (!res.body.user) throw new Error('Expected authenticated user');

});
ヒント:テストは小さく、決定論的に保ちましょう。Supertestは、コントローラー、ミドルウェア、アダプターを単独で検証するのに優れています。

CI/CDおよびモノレポにおけるSupertest

品質を一貫して保つために、すべてのプルリクエストでCIにSupertestを実行します。典型的なセットアップは次のとおりです。

GitHub Actionsの例:

name: api-tests

on: [push, pull_request]

jobs:

  test:

    runs-on: ubuntu-latest

    steps:

      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4

        with:

          node-version: '20'

      - run: npm ci

      - run: npm test -- --ci

モノレポでは、影響を受けるテストのみを実行し、フィードバックループを高速化するために node_modules をキャッシュします。Supertestの最小限のオーバーヘッドは、大規模なコードベースに最適です。


APIテストプラットフォームを使用するタイミング

Supertestは、コードレベルでの迅速なフィードバックに優れています。しかし、本番環境の現実はさらに多くのことを要求します。

ここにApidogのようなAPIテストプラットフォームの真価があります。API設計モックテストデバッグ、そしてドキュメントを統合することで、チームの連携を保ち、品質ゲートを堅牢にします。

ボタン
ApidogのテストUI

ApidogがSupertestを補完する理由


結合されたワークフロー:Supertest + Apidog

開発者中心のチェックにはSupertestを、エンドツーエンドのコラボレーションにはApidogを使用します。以下に、実用的な責任分担を示します。

タスク
Supertest
Apidog
コントローラー/ミドルウェアのユニットチェック
優秀
補完的
迅速な契約回帰(ステータス/ヘッダー)
優秀
優秀
スキーマガバナンス(OpenAPI)
手動
第一級
フロントエンド用モックサーバー
限定的
組み込み
データ駆動型シナリオ
限定的
第一級
環境横断的なCIオーケストレーション
良好
第一級
チームコラボレーション/ドキュメント
最小限
第一級

ワークフローの例:


高度なSupertestパターン

役立つ追加のヒントをいくつか紹介します:


結論:API品質へのバランスの取れたアプローチ

高品質なAPIは、スピードと厳密さの両方で構築されます。Supertestは、開発者にコードに近いエンドポイントを検証するための高速で表現力豊かな方法を提供し、密なフィードバックループと、ブランチから逸脱する前に回帰を捕捉するのに最適です。シンプルで信頼性が高く、多くのNode.jsバックエンドで実証されています。

しかし、システムが成長するにつれて、コラボレーション、契約ガバナンス、および環境を意識した実行が必要になります。そこで、統合APIテストプラットフォームであるApidogがワークフローを向上させます。契約設計(OpenAPI)、モックサーバー、ビジュアルアサーション、環境変数、CIオーケストレーションを統合することで、Apidogはチームがアイデアからデリバリーまで連携して動くのを支援します。Supertestが迅速で決定論的なアサーションでコードパスを保護し続ける一方で、フロントエンド、バックエンド、QAは同じ真実のソースを共有できます。

自信を持って迅速に進めたい場合は、両方を使用してください。

このバランスの取れたアプローチは、今日正しいだけでなく、製品の進化とともに回復力のあるAPIを生み出します。今すぐSupertestのチェックを書き始め、Apidogを使って本番環境レベルのパイプラインでそれらを活用しましょう。

ボタン

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる