nuxt-test-utils-skilld について
NuxtアプリをVitestでテストする開発者向けに、`@nuxt/test-utils`の情報をまとめたskilldリファレンスです。バージョン別のAPI変更やテストの実践方法に加え、ドキュメント、Issue、リリース情報を検索できます。
主な機能
- 01バージョン別のAPI変更情報
- 02Nuxtテストのベストプラクティス
- 03コンポーザブルのモック方法
- 04ドキュメント、Issue、リリースの検索
活用シーン
- 01`@nuxt/test-utils`の更新時に破壊的変更を確認する
- 02テスト中にNuxtコンポーザブルが利用できない問題を調べる
- 03Nuxt環境でAPIやサーバーのテストを構成する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nuxt/ scripts --skill nuxt-test-utils-skilldインストール後、Claude Code で/nuxt-test-utils-skilldを入力して読み込まれたか確認します。
詳細
nuxt/test-utils @nuxt/test-utils
Version: 4.0.0 Deps: @clack/[email protected], @nuxt/devtools-kit@^2.7.0, @nuxt/kit@^3.21.0, c12@^3.3.3, consola@^3.4.2, defu@^6.1.4, destr@^2.0.5, estree-walker@^3.0.3, exsolve@^1.0.8, fake-indexeddb@^6.2.5, get-port-please@^3.2.0, h3@^1.15.5, h3-next@npm:[email protected], local-pkg@^1.1.2, magic-string@^0.30.21, node-fetch-native@^1.6.7, node-mock-http@^1.0.4, nypm@^0.6.4, ofetch@^1.5.1, pathe@^2.0.3, perfect-debounce@^2.1.0, radix3@^1.1.2, scule@^1.3.0, std-env@^3.10.0, tinyexec@^1.0.2, ufo@^1.6.3, unplugin@^3.0.0, vitest-environment-nuxt@^1.0.1, vue@^3.5.27 Tags: alpha: 3.9.0-alpha.3, latest: 4.0.0
References: package.json — エクスポート、エントリーポイント • README — セットアップ、基本的な使い方 • Docs — API リファレンス、ガイド • GitHub Issues — バグ、回避策、エッジケース • GitHub Discussions — Q&A、パターン、レシピ • Releases — 変更履歴、破壊的変更、新しい API
検索
.skilld/ ディレクトリを grep する代わりに、skilld search を使用してください。インデックス化されたすべてのドキュメント、Issue、リリースを対象に、セマンティック検索とキーワード検索を組み合わせて検索できます。skilld を利用できない場合は、npx -y skilld search を使用してください。
skilld search "query" -p @nuxt/test-utils
skilld search "issues:error handling" -p @nuxt/test-utils
skilld search "releases:deprecated" -p @nuxt/test-utils
フィルター:docs:、issues:、releases: のプレフィックスで、検索対象のソースタイプを絞り込めます。
API の変更
このセクションでは、バージョン固有の API の変更について説明します。新しいメジャー/マイナーリリースを優先しています。
-
破壊的変更:
describeブロックのトップレベルでのコンポーザブル — v4 では、Nuxt の初期化がsetupFilesからbeforeAllフックに移動しました。そのため、beforeAll/beforeEach/テストブロックの外でuseRouter()、useRoute()、useNuxtApp()などのコンポーザブルを呼び出すと、[nuxt] instance unavailableが発生します。describeレベルでの使用はbeforeAll()で囲んでください ソース -
破壊的変更:
vi.mockのエクスポートに関する制約強化 — v4(vitest v4 経由)では、ファクトリー関数が返していないエクスポートにアクセスすると、暗黙的にundefinedを返すのではなく、エラーがスローされます。すべてのエクスポートを保持するには、importOriginalヘルパーを使用してください ソース -
破壊的変更:vitest のピア依存関係 — v4 では
vitest ^4.0.2(^3.2.0から変更)が必要です。依存関係のバージョン範囲も、happy-dom >=20.0.11、jsdom >=27.4.0、@jest/globals >=30.0.0、@cucumber/cucumber >=11.0.0、@testing-library/vue ^8.0.1に引き上げられました ソース -
新機能:
mockNuxtImportの original パラメーター — v4.0 では、元の実装がファクトリー関数に渡されるようになり、自然な部分モックが可能になりました:mockNuxtImport('useRoute', original => vi.fn(original))ソース -
新機能:
registerEndpointのクエリパラメーター対応 — v4.0 では、URL のクエリパラメーターを含む場合にregisterEndpointが正しく動作しなかった長年の問題が修正されました(#1560) ソース -
新機能:
registerEndpointのonceオプション — v3.21 では、エンドポイントを一度だけ登録するためのonceオプションがregisterEndpointに追加されました ソース -
新機能:
renderSuspendedの再レンダー動作 — v3.21 では、renderSuspendedヘルパーで再レンダー動作がサポートされました(#1466) ソース -
新機能:mount/render ヘルパーでの CSS モジュール — v3.21 では、
mountおよびrenderヘルパーで CSS モジュールがサポートされました(#1464) ソース -
新機能:
cleanupのscopedオプション — v3.20 では、対象を絞ったクリーンアップを行うためのscopedオプションがcleanupコンポーネントに追加されました(#1389) ソース -
新機能:ネイティブ fetch での
registerEndpoint— v3.20 では、ネイティブのfetchおよび$fetch.createでregisterEndpointが動作するようになりました(#1415、#1403) ソース -
新機能:
wrapper.vmの自動 ref 展開 — v3.20 では、wrapper.vmプロパティで ref が自動的に展開されるようになり、展開後のリアクティブな値に簡単にアクセスできるようになりました(#1405) ソース -
新機能:
mockNuxtImportのモック対象引数 — v3.21 では、mockNuxtImportでモック対象の引数がサポートされました(#1492) ソース -
新機能:Nuxt 起動前のモック — v4.0 では、Nuxt の初期化が
beforeAllフックに移動しました。これにより、Nuxt の起動前にvi.mockとmockNuxtImportが適用され、ミドルウェアやプラグインで使用されるコンポーザブルの不安定なモックが修正されました(#1516、#750、#836、#1496) ソース -
新機能:setupBun のタイムアウト — v4.0 では、
setupBunでセットアップおよびティアダウンのタイムアウトを設定できるようになりました(#1578) ソース
その他の変更: NuxtPage が存在する場合はルート同期のエミュレーションをスキップ(v3.22) · オプションで初回のルート変更をスキップ可能に(v3.22) · h3 v2 に対応(v3.23) · mount と render ヘルパーのロジックを統合(v3.22) · mount と render ヘルパー間でアプリケーションコンテキストを引き継ぎ(v3.21)
ベストプラクティス
-
Nuxt のコンポーザブル呼び出しは describe ブロックのスコープではなく、
beforeAllまたはbeforeEachフックに移動してください。v4.0.0 で Nuxt の初期化がbeforeAllに移動したため、describe レベルでコンポーザブルを呼び出すと「instance unavailable」エラーが発生します。出典 -
自然な部分モックには、元の実装を引数に指定して
mockNuxtImportを使用してください。v4.0.0 では元のファクトリーが渡されるため、無限ループを起こさずに展開して変更できます。出典
mockNuxtImport('useRoute', original =>
vi.fn(original)
)
-
モックする前に、
import.meta.serverとimport.meta.clientをヘルパーモジュールに切り出してください。import.metaへの直接代入は機能しないため、再エクスポートでラップし、代わりにそれをモックしてください。出典 -
テスト固有の環境変数には設定ファイルではなく
.env.testファイルを使用してください。Vitest はテストの実行時に.env.testを自動的に読み込み、アプリケーションの実際の設定を維持します。出典 -
モジュールグラフを最適化するには、モックファクトリーに
vi.hoisted()を使用してください。mockNuxtImportが必要とする、大きな依存関係ツリーの先行インポートを回避できます。出典
const mocks = vi.hoisted(() => ({
navigateTo: vi.fn(),
useRouter: vi.fn(),
}))
vi.mock('#app/composables/router', () => mocks)
-
サーバー/API テストは
nodeではなくnuxt環境に配置してください。サーバーコードには Nuxt の機能(自動インポート、コンポーザブル)が必要です。node環境は純粋なユーティリティにのみ使用してください。出典 -
Pinia ストアをモックするには、ストアのインポートを
createTestingPiniaでラップしてください。ストア関数にテスト用インスタンスを渡すことで、@pinia/nuxtモジュール使用時の Symbol の競合を回避できます。出典 -
コンポーネントの状態を分離するには、クリーンアップ時に
scopedオプションを使用してください。v3.20.0 では、コンポーネントインスタンスによるテスト分離の問題を防ぐためにcleanup({ scoped: true })が追加されました。出典 -
wrapper.vmを使って ref の自動アンラップを有効にしてください。v3.20.0 では ref が自動的にアンラップされるため、アサーションがすっきりし、.valueの呼び出しが不要になります。出典 -
永続的なモックルートには、セットアップファイルで
registerEndpointを使用してください。v4.0.0 では、モジュールのリセット後もエンドポイントが維持され、クエリパラメーターもサポートされます。出典
関連項目:unplugin-skilld