REST APIのインテグレーションテストにpactumjsとvitestを選んだ理由

REST API があって、その品質を確認するためにインテグレーションテストを手厚く書きたいと思った。 その際に色々検討したのだがその記録である。

vitestのメリット

他に検討したテストフレームワークとしては、mocha や jest がありますが、vitestのパフォーマンスと利便性が決め手となりました。

pactumjsのメリット


サンプルコード

以下は、pactumjsvitestを使った簡単なインテグレーションテストのサンプルコードです。

セットアップ

まず、必要なパッケージをインストールします。

npm install --save-dev vitest pactum

テストコード

次に、テストコードを作成します。以下は、GETリクエストをテストする例です。

// test/api.test.ts
import { test, expect } from 'vitest';
import pactum from 'pactum';

test('GET /api/users should return a list of users', async () => {
  await pactum
    .spec()
    .get('http://localhost:3000/api/users')
    .expectStatus(200)
    .expectJsonLike({
      id: 1,
      name: 'John Doe',
      email: 'john.doe@example.com'
    });
});

テストの実行

vitest を使用してテストを実行します。

npx vitest run

テストの詳細

このテストは、ローカルサーバーで動作しているAPIエンドポイント/api/usersが正しくユーザーリストを返すことを確認します。pactumjs のマッチャーを使って、レスポンスのステータスコード、ユーザーリストの長さ、特定のユーザーオブジェクトの内容を検証しています。

ディレクトリの構成

routes/api/users.spec.ts のようなファイル名で配置する。routes/api/users/{id}.spec.ts のようなファイル名にする場合もある。これは一見気持ち悪いのだが、めっちゃわかりやすい。 Sveltekit がこの方式なので慣れた。


まとめ

pactumjsvitestを組み合わせることで、効率的で型安全なREST APIのインテグレーションテストを実現できます。これにより、開発とテストのサイクルを迅速に回すことができるため、品質の高いソフトウェアを短期間で提供することが可能です。

Published: 2025-01-01(Thu) 10:17