sonukapoor/warpdom는 단위 테스트용 DOM 구현이다. 저장소 설명은 "거의 즉시 로드되면서 Node의 브라우저 DOM 구현인 jsdom처럼 동작한다"고 밝힌다. 2026년 11월 2일 커밋 79d0d92가 PR #236을 병합했다. fast mode에서 테스트 파일 사이를 초기화할 때 setup 파일이 만든 mock을 되돌리는 기준이 바뀌었다. 이전에는 멤버의 속성 디스크립터(getter·setter)를 비교해 복원 대상을 골랐고, 이제는 각 키를 첫 mock부터 마지막 mock을 끝내는 cleanup까지 추적해 원래 값을 되돌린다. 이슈 #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다.