テストガイド
このドキュメントは、Rin プロジェクトにおけるテストの包括的なガイドです。
概要
Rin はクライアントとサーバーで異なるテストフレームワークを使用します:
- クライアント: React コンポーネントテスト用の jsdom 環境を備えた Vitest
- サーバー: インメモリ SQLite データベースを使用した Bun のネイティブテストランナー
テストの実行
すべてのテスト
クライアントテスト
サーバーテスト
テスト構造
クライアントテスト
場所: client/src/**/__tests__/*.test.ts
サーバーテスト
場所:
- ユニットテスト:
server/src/**/__tests__/*.test.ts - 統合テスト:
server/tests/integration/*.test.ts - セキュリティテスト:
server/tests/security/*.test.ts
テストの作成
クライアントテスト
- コンポーネントテスト: React コンポーネントを分離してテスト
- API クライアントテスト: HTTP クライアントと API 呼び出しをテスト
- ユーティリティテスト: ヘルパー関数をテスト
例:
サーバーテスト
- サービステスト: サービス内のビジネスロジックをテスト
- ルーターテスト: API エンドポイントをテスト
- ユーティリティテスト: ヘルパー関数をテスト
データベースを使用した例:
テストフィクスチャ
サーバーテストはモックデータ用のフィクスチャを使用します:
server/tests/fixtures/index.ts- モックデータベースと環境のセットアップserver/tests/test-api-client.ts- テスト用の型安全な API クライアント
カバレッジ
クライアントとサーバーの両方がコードカバレッジレポートをサポートします:
カバレッジレポートは以下に生成されます:
- クライアント:
client/coverage/ - サーバー:
server/coverage/
CI/CD 統合
テストは以下で自動的に実行されます:
mainまたはdevelopブランチへのプッシュごと- すべてのプルリクエスト
- デプロイ前(ブロッキング)
詳細は GitHub Actions ワークフロー を参照してください。
ベストプラクティス
- 新機能のテストを書く: すべての新機能にはテストを含める必要があります
- エッジケースをテストする: エラー条件と境界ケースのテストを含めます
- 説明的な名前を使用する: テストの説明は、何をテストしているかを明確に述べる必要があります
- テストを独立させる: 各テストは独立して実行できる必要があります
- 外部依存関係をモックする: 外部 API とサービスにはモックを使用します
トラブルシューティング
クライアントテストが失敗する
サーバーテストが失敗する
カバレッジが生成されない
テスト設定でカバレッジレポーターが構成されていることを確認してください。