| name | testing |
| description | プロジェクトのテスト実装ガイドラインに従ってテストコードを生成・レビューします。テストケースの作成、既存テストのレビュー、テストのリファクタリング時に使用してください。DDDとオニオンアーキテクチャに基づいたテスト設計を行い、日本語のテストケース名とArrange-Act-Assertパターンを使用します。Vitest、testInjector、インメモリリポジトリ、Factory、setupFiles()に関連するテスト作成時に使用します。 |
テストケース名の規則
日本語で「(条件)場合、(期待値)」形式で記述する。
良い例:
- "投稿が見つからない場合はnotFoundPostを返す"
- "フォローしているユーザーが投稿している場合、そのユーザーの投稿を返す"
- "subscriberの投稿は保存すべき"
悪い例:
- "正しいデータを返す"
- "エラーハンドリング"
Arrange-Act-Assertパターン
全てのテストケースは以下の構造で記述する:
test("(条件)場合、(期待値)", async () => {
// arrange
// テストデータの準備
// act
// テスト対象の実行
// assert
// 結果の検証
});
act & assertを同じ行で書く場合:
test("handleが解決できない場合、HandleResolutionErrorをスローする", async () => {
// arrange
const uri = new AtUri("at://notfound.example/app.bsky.feed.post/abc123");
// act & assert
await expect(atUriService.resolveHostname(uri)).rejects.toThrow(
HandleResolutionError,
);
});
詳細なガイド
テストパターンと実装例: references/patterns.mdを参照
- データベース使用パターン(Repository層)
- インメモリ実装パターン(Application/Domain層)
- recordFactoryの使用例
- インメモリリポジトリのセットアップ
- ctxオブジェクトの使用
- テストすべきケース
- レイヤー別の使い分け
アサーション: references/assertions.mdを参照
- toMatchObjectで部分一致
- 配列の部分一致
- エラーの検証
Factoryの使い方: references/factories.mdを参照
- @repo/test-utils のFactory(データベース使用)
- @repo/common/test のファクトリ関数(インメモリ)
- 使い分けガイド
インメモリリポジトリの重要な注意
Application/Domain層のテストでインメモリリポジトリを使用する場合、テスト間のデータ分離が自動的に行われる:
vitest.unit.setup.tsでsetupFiles()が呼ばれ、beforeEachで全てのインメモリリポジトリが.clear()される- 新しいアプリを作成する場合は
vitest.unit.setup.tsにsetupFiles()の呼び出しを記述する必要がある
コメントとコードスタイル
- テストケースにはarrange-act-assertパターンに基づいたコメントを必ず書く
- プロダクションコードにはコメントを追加しない
- プロダクションコードに既に存在するコメントは削除しない