期間: 2026-09-27 〜 2026-09-30 · PR 19 件(新機能 0 / 変更・修正 14 / その他 5)
新機能
なし
変更・修正
キャッシュ: キャッシュ済みモジュールの import を再検証(#11381)
Before
キャッシュされた変換結果は、変換時に Vite が解決した URL を import したままになるため、ブランチの切り替えで依存がリネームされた場合などに古い結果が使われていた(#11246)。
After
キャッシュを使う前に、すべての import が今も同じモジュールに解決されるかを確認し、違えばモジュールを変換し直す。キャッシュされた importer は、ルート外の import を読み込み可能として登録するため、クライアント環境(jsdom・happy-dom)でも
server.fs.allowの外の依存の変更を読み込める。ベンチマークでは実行時間・メモリに目立った差はなく、ディスク上のキャッシュは約 1% 増える。
⏳ 未リリース · トピック: キャッシュ
キャッシュ: キャッシュキーの生成をプロジェクトごとに分離(#11301)
Before
すべてのプロジェクトのキャッシュキー生成関数が全モジュールに対して実行されていたため、設定の異なるプロジェクトどうしで誤った変換結果を共有することがあった(#11281)。
After
キャッシュキー生成関数は、そのプロジェクトの設定に対してだけ実行される。プラグインのコンテキストの JSDoc にもプロジェクト単位であることを明記した。
⏳ 未リリース · トピック: キャッシュ
終了時にルートの一時ディレクトリを削除(#11248)
Before
すべて成功した実行でも、
os.tmpdir()の下にルートのVitest._tmpDir(実行ごとのモジュールのコピー)が残っていた。TestProject.close()はプロジェクトごとの一時ディレクトリしか消さず、Vitest.close()は何も消していなかった(#11224)。
After
Vitest.close()がプロジェクトとプールを閉じた後にルートの一時ディレクトリを削除する。閉じた後に再起動した場合は新しいディレクトリを割り当てる。
⏳ 未リリース · トピック: キャッシュ
repeats の各回で result.status を分離(#11218)
Before
repeatsのループが回をまたいで結果の状態を使い回していたため、失敗の後に成功した回でonTestFailedが呼ばれたり、retryを有効にしていると後の成功が前の回の失敗を消して、テストが成功と報告されたりしていた。
After
回ごとに結果をリセットし、失敗した回のエラーを別に集めるようにした。各回は独立に評価され、どれか 1 回でも失敗すればテスト全体が失敗になる。
⏳ 未リリース · トピック: ランタイム
test.fails が期待どおり失敗したときはリトライしないように(#11219)
Before
test.failsの成功・失敗の反転が実行の後に行われていたため、期待どおりに失敗したテストでもリトライされていた(#11068)。
After
反転をリトライの判断より前に行うようにし、期待どおりの失敗ではリトライしない。
⏳ 未リリース · トピック: ランタイム
sequence.groupOrder を設定したときにプール ID が重複する不具合を修正(#11392)
Before
次の
sequence.groupOrderのグループが始まるとsetMaxWorkers()が ID の表を置き換え、前のグループの最後のタスクが解放した ID が新しい表に入ってしまい、使用中の ID が空きとして扱われていた。その結果、次のファイルが同じVITEST_POOL_IDで実行されていた(#11391)。
After
ID は取得した表に返すようにし、
VITEST_POOL_IDが重複しなくなった。
⏳ 未リリース · トピック: プール
vm プールで index.html の依存を事前バンドルしないように(#11360)
Before
pool: 'vmThreads'/'vmForks'では、__vitest_vm__環境に optimizeDeps の設定が適用されず、Vite の依存の optimizer がプロジェクトのindex.htmlから依存を探していた。バンドルできない依存があると、テストがすべて成功しても未処理の rejection で終了コード 1 になっていた(#11329)。
After
optimizeDeps の設定を
__vitest_vm__環境にも適用し、threads/forksと同じくindex.htmlからの自動検出を行わない。
⏳ 未リリース · トピック: プール
jsdom: jsdom 30.1 の Blob に対応(#11379)
Before
jsdom 30.1 で
Blobがうまく扱えなかった(#11336)。
After
jsdom 環境の実装(
integrations/env/jsdom.ts)を修正し、jsdom 30.1 のBlobに対応した。
⏳ 未リリース · トピック: テスト環境
browser: モックのパスの境界を確認(#11362)
Before
ルートが
packages/appのとき、resolveMockPath()が/@fs/.../packages/app-utils/src/value.tsを-utils/src/value.tsに変えてしまい、Playwright プロバイダーがリクエストを横取りできず、モックが効かなかった(#11361)。
After
node/resolver.tsと同じくwithTrailingSlash(root)で確認するようにし、名前がルートで始まる隣のディレクトリを誤ってルート配下と見なさない。ルートが/の場合の挙動は変わらない。
ブラウザモードでインターセプターの警告を出さないように(#11377)
Before
ブラウザモードで、モックのインターセプターに関する警告が表示されていた(#11276)。
After
警告を出さないようにした。あわせて、モックのインターセプター(ブラウザモードとは別の公開パッケージ)のセキュリティも改善した。
browser: ブラウザが使う環境の設定を保持(#11378)
Before
#10554 以降、ブラウザのテストはプロジェクトの Vite サーバーで配信され、
client以外の環境はすべて Node のモジュールランナー向けに設定されていた。consumer: 'client'のカスタム環境はoptimizeDepsを失い(resolve.noExternal: trueなども設定され)、CommonJS の依存が変換されずにページに届いてReferenceError: module is not definedになっていた(vitest-plugin-rsc など。5.0.0-beta.2 では動いていた)。
After
ブラウザモードでは、
consumer: 'client'の環境をclientと同様にそのままにする。Vite がconsumerを'client'にするのはclient環境だけなので、影響するのは明示的に指定した環境だけ。
⏳ 未リリース · トピック: ブラウザモード
browser: キャンセル中のページのクラッシュを無視(#11386)
Before
キャンセル中に、Playwright の
crashイベントが websocket のcloseイベントより先に届くと、実行が失敗していた(bail-out.test.tsの flaky の原因)。
After
キャンセル中のページのクラッシュを無視するようにした。あわせて、oxfmt への移行(#11367)で古くなった
scoped-fixtures.test.tsのスナップショットを更新した。
⏳ 未リリース · トピック: ブラウザモード
browser: リトライしたテストで toMatchScreenshot が誤った参照画像を使う不具合を修正(#11393)
Before
リトライされたテストで、
toMatchScreenshotが誤った参照画像を使っていた(#11382)。
After
リトライ時にも正しい参照画像を使うよう修正した。
⏳ 未リリース · トピック: ブラウザモード、アサーション
ui: 分割ペインのハンドルが iframe と重なる不具合を修正(#11221)
Before
UI で、分割ペインのハンドルがブラウザの iframe と重なっていた(#11170)。
After
BrowserIframe.vueとスタイルを修正し、重ならないようにした。
⏳ 未リリース · トピック: UI