sonukapoor/warpdom はユニットテスト用の DOM 実装である。リポジトリの説明は「ほぼ瞬時にロードされ、Node のブラウザ DOM 実装である jsdom のように動作する」と述べる。2026 年 11 月 2 日のコミット 79d0d92 が PR #236 をマージした。fast mode でテストファイル間をリセットする際、setup ファイルが作った mock を復元する基準が変わった。従来はメンバーのプロパティ記述子(getter と setter)を比較して復元対象を選んでいたが、現在では各キーを最初の mock から最後の mock を終える cleanup まで追跡し、元の値に戻す。issue #230 を取り扱う変更である。
判断基準が「何を戻すか」から「いつ終わったか」へ移った。`warpdom/vitest/reset` は `vi.stubGlobal`、`vi.spyOn`、`vi.unstubAllGlobals`、`vi.restoreAllMocks`、および各 spy の `mockRestore` をラップし、最初の mock が置き換えられる直前の値を原本として記録する。途中で getter と setter がどう変化したかに関係なく、その原本で復元する。setup ファイルが作った stub を Vitest の cleanup やテストが解除すると、次のファイルの setup が同じメンバーを再び stub する際に以前の stub 値が原本として固定されるという問題があり、この方式はその状況を防ぐ。ドキュメント fast-mode.md は、Vitest 4 と 5 の `vi.restoreAllMocks` が getter と setter の両方を spy した後に getter の spy を残してしまう問題(測定バージョン 4.1.12、5.0.3)も原本に戻すように変更されたと記載している。今回のコミットはドキュメント、src/vitest-reset.js、src/vitest.js、fixtures/vitest-fast フィクスチャ、test/vitest-adapter.test.js など 10 ファイルにまたがる 425 行の変更(+327/-98)である。
ただし範囲は fast mode である。Vitest 3 では `vi.restoreAllMocks` がすでに `mockRestore()` された spy を再び以前の値に戻す問題が残っており(測定バージョン 3.2.4、warpdom なし)、ドキュメントもこれを「カバーされていない」と明記している。ワーカーごとに一度しか読み込まれないモジュールが設定したグローバル(polyfill など)や、テストが `global.fetch = vi.fn()` のように変更した値は復元対象ではない。個別の性能数値やベンチマーク結果は今回のコミットには含まれておらず、実際の改善幅をコミットだけから判断するのは難しい。出典は GitHub のコミット 79d0d92 である。