Appearance
Metanaka Nuxt Testing
Rule Levels
[必須]: 違反は必須修正として扱う。[推奨]: 原則として採用し、合理的な逸脱は許容する。[条件付き]: 条件成立時だけ適用し、根拠不足なら確認事項とする。
レビュー判定に使う規則は level tag 付きの箇条書きだけとする。
Scope and Ownership
[必須]この skill はapp/features/**/*.test.tsとapp/shared/**/*.test.tsの Vitest unit test の完成形を扱う。[必須]test file は対象 production file と同じ slice に置き、対応する<name>.test.tsとする。[必須]test の配置以外の feature/shared 境界はmetanaka-nuxt-architecture、TypeScript 表現はmetanaka-nuxt-coding、実行順序はmetanaka-nuxt-tddへ委ねる。[条件付き]Vue DOM、accessibility、実ブラウザ操作、主要 user flow は Playwright の責務とし、pure/composable behavior を無理に E2E へ寄せない。
Specification Structure
[必須]describeは対象 public composable/module 名にする。[必須]ittitle は日本語で、前提または操作と期待結果の両方を含める。[推奨]title は〜した場合は〜となることまたは〜のとき〜することを使い、実装手順ではなく observable behavior を記述する。[必須]1つのitは1つの observable behavior を検証する。異なる結果、状態遷移、collaborator call は別 case にする。[推奨]本文は arrange、act、assert の順に置き、短い test は空行で区切る。コメントは理解が増す場合だけ使う。[必須]今回追加・変更する test を現行規則へ合わせ、無関係な既存 test の一括修正を混ぜない。
Assertions
[必須]title に書いた期待結果を assertion で直接確認する。[必須]assertion のない test、実行できたことだけを確認する test、意図が読めない snapshot-only test を書かない。[推奨]object 全体と個別 property のどちらを使うかは、public contract が最も明確に読める必要十分な粒度で選ぶ。[必須]regression test は壊したくない observable state、result、call を title と assertion に含める。[必須]async の途中状態を検証した deferred Promise は最後に resolve/reject し、対象 Promise を await して未解決の処理を残さない。
Mocks and Helpers
[必須]HTTP、Firestore、Firebase Auth、timer、random、現在時刻、browser API など外部境界だけを mock/fake にする。[推奨]新規 code では dependency parameter または薄い adapter/plugin boundary を使い、module mock を既定にしない。[条件付き]既存 code の境界分離が依頼範囲を大きく超える場合は、対象 module の mock を最小限に使ってよい。[必須]mock では endpoint、method、body、call count、call order のうち public behavior に必要なものだけを検証し、内部実装へ過結合しない。[推奨]複数 test で意味のある前提を共有する fixture、successful response、deferred Promise は小さな helper にしてよい。[必須]helper 名は作るデータまたは前提を表し、test 本文から期待 behavior を隠さない。
Behavior Coverage
[条件付き]composable の submit behavior では validation failure、pending guard、成功 request、server error mapping、error clear、reject 時 cleanup のうち変更対象に関係する結果を検証する。[条件付き]model/utility では同値分割、境界値、状態遷移、validation result、error key のうち仕様上意味のある case を検証する。[条件付き]i18n/共有状態では翻訳済み文字列ではなく stable key を扱うことを検証する。
Verification
[必須]変更した test file は Nuxt project root でpnpm test -- <path/to/test.test.ts>を実行する。[必須]TypeScript test code を変更したらpnpm tcも実行する。[条件付き]test script の実際の引数形式が異なる場合はpackage.jsonとdocs/testing.mdを正とし、最も狭い同等 command を使う。