Appearance
Vitest 実行ガイド
目的
フロントエンド(TypeScript / JavaScript)のユニットテストを Vitest で実行する方法を説明します。
配置規約
- テストはソースの隣にコロケートする(
*.test.ts/*.test.tsx/*.test.js) - 対象パスは
vitest.config.tsのincludeに従う:core_src/**/*.test.{ts,tsx,js}tests/**/*.test.{ts,tsx,js}
__tests__/ディレクトリは使わない(既存規約に合わせる)- Playwright の E2E(
tests/e2e/*.spec.js)は Vitest の対象外
実行コマンド
| 用途 | コマンド |
|---|---|
| Vitest のみ | npx vitest run |
プロジェクトの test スクリプト | npm test |
npm test は次を順に実行します。
build:paid-article-adminvitest runtest:dbml-subsets(Node 組み込みテスト。Vitest ではない)
開発中の確認は npx vitest run で十分なことが多いです。CI や PR 前の通し確認では npm test を使います。
前提(Vitest 5)
- Node.js 24(Vitest 5 は Node
>= 22.12) - Vite 6.4 以上(Vitest 5 の peer。ルートの
devDependenciesにvite^8.x を明示。.npmrcのlegacy-peer-deps=trueでは peer の自動解決に頼れない) - Vitest 5 では
clearMocksの既定がtrue(各テスト前に mock 呼び出し履歴がクリアされる)。履歴の持ち越しに依存しない書き方にする。旧挙動が必要な場合のみvitest.config.tsでclearMocks: falseを検討する
設定
- 設定ファイル: リポジトリ直下の
vitest.config.ts - 環境:
jsdom globals: true(describe/it/expectを import なしでも利用可。既存テストは明示 import も可)- React フックのテストでは
@testing-library/reactのrenderHookを使う @wordpress/elementを使うフックは、既存パターンどおりvi.mock('@wordpress/element', () => import('react'))で React に差し替える
書かないテスト
- 型の確認だけのテスト(
expect(typeof formatSamai).toBe('function')のように、関数やコンポーネントが存在する・特定の型を返すことだけを見るもの)は書かない。型は TypeScript が保証する - モックの戻り値をそのまま assert するだけのテスト(
vi.fn().mockReturnValue(x)を呼んでxが返ることを確かめるだけのもの)は書かない。テスト対象のロジックを通らないため、回帰を防がない
書くテスト・書かないテストの考え方は PHPUnit と同じです。詳しくは PHPUnit テスト実行ガイドの「書かないテスト」と「書くテスト」を参照してください。
CI
CI Quality Gate(.github/workflows/ci-quality-gate.yml)の Run Vitest ステップで npm run test が実行されます。
- 追加 push(
synchronize)では自動起動しない(CI 運用方針)