REST APIのインテグレーションテストにpactumjsとvitestを選んだ理由
REST API があって、その品質を確認するためにインテグレーションテストを手厚く書きたいと思った。 その際に色々検討したのだがその記録である。
vitest
のメリット
- 高速性:
vitest
は非常に高速であり、テストの実行時間を短縮できます。 - TypeScriptのサポート: TypeScriptを簡単に使用でき、型安全なテストコードを書けます。
- Watchモード: テストコードの変更を検知して素早く再実行することができ、開発効率が向上します。エンターキーおしたら再実行できるのも素敵。
他に検討したテストフレームワークとしては、mocha や jest がありますが、vitest
のパフォーマンスと利便性が決め手となりました。
pactumjs
のメリット
- Web APIテストに特化:
pactumjs
はWeb APIのテストを簡単に行えるように設計されています。 - 豊富なマッチャー: さまざまなマッチャーが用意されており、テストコードを簡潔に書くことができます。
サンプルコード
以下は、pactumjs
とvitest
を使った簡単なインテグレーションテストのサンプルコードです。
セットアップ
まず、必要なパッケージをインストールします。
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 がこの方式なので慣れた。
まとめ
pactumjs
とvitest
を組み合わせることで、効率的で型安全なREST APIのインテグレーションテストを実現できます。これにより、開発とテストのサイクルを迅速に回すことができるため、品質の高いソフトウェアを短期間で提供することが可能です。
Published: 2025-01-01(Thu) 10:17