Skip to content

Metanaka Nuxt Testing

Rule Levels

  • [必須]: 違反は必須修正として扱う。
  • [推奨]: 原則として採用し、合理的な逸脱は許容する。
  • [条件付き]: 条件成立時だけ適用し、根拠不足なら確認事項とする。

レビュー判定に使う規則は level tag 付きの箇条書きだけとする。

Scope and Ownership

  • [必須] この skill は app/features/**/*.test.tsapp/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 名にする。
  • [必須] it title は日本語で、前提または操作と期待結果の両方を含める。
  • [推奨] 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.jsondocs/testing.md を正とし、最も狭い同等 command を使う。