Repository navigation
test: restore global state and scoped spies - #778
Merged
Merged
Conversation
Refs #683 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Contributor
Changepacks@devup-ui/wasm@1.0.83 → 1.0.84 - bindings/devup-ui-wasm/package.jsonPatch
@devup-ui/bun-plugin@1.0.22 → 1.0.23 - packages/bun-plugin/package.jsonPatch
@devup-ui/components@0.1.60 → 0.1.61 - packages/components/package.jsonPatch
@devup-ui/eslint-plugin@1.0.22 → 1.0.23 - packages/eslint-plugin/package.jsonPatch
@devup-ui/next-plugin@1.0.90 → 1.0.91 - packages/next-plugin/package.jsonPatch
@devup-ui/plugin-utils@1.0.17 → 1.0.18 - packages/plugin-utils/package.jsonPatch
@devup-ui/rsbuild-plugin@1.0.67 → 1.0.68 - packages/rsbuild-plugin/package.jsonPatch
@devup-ui/vite-plugin@1.0.73 → 1.0.74 - packages/vite-plugin/package.jsonPatch
@devup-ui/webpack-plugin@1.0.71 → 1.0.72 - packages/webpack-plugin/package.jsonPatch
|
Codecov Report✅ All modified and coverable lines are covered by tests. 🚀 New features to boost your workflow:
|
owjs3901
marked this pull request as ready for review
October 13, 2026 10:01
This was referenced Oct 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refs #683 (전수조사 #682의 L: TypeScript 테스트 전역 상태 복구). 최신
origin/main의11790bef에서 시작한 독립 PR입니다.요약
플러그인 테스트가
describe등록 중console.error = mock()을 실행하여 같은 Bun 프로세스의 이후 테스트까지 오류 출력을 침묵시키는 누수를 수정합니다. 테스트 파일 12개만 변경하며 프로덕션 코드·Rust·의존성·설정은 변경하지 않습니다.문제와 복구 규칙
mockClear()나 다른 파일의mock.restore()에 의존하지 않습니다.console.error교체는 기존beforeEach에서 spy를 설치하고afterEach에서 해당 spy를 복구합니다.try/finally에서 복구합니다. assertion 실패, await 거절, 두 번째 spy 설치 실패 시에도 먼저 설치한 spy가 남지 않습니다.window는 값뿐 아니라 원래 property descriptor/존재 여부를 매 테스트 복구합니다. 두matchMediafixture도 해당 테스트 안에서 복구합니다.getTheme/initTheme테스트는data-theme와 건드린__DF_THEME_SELECTED__저장값을 원래 값 또는 부재 상태로 복구합니다.profile/plugin테스트의process.env는 복사본으로 바꾸지 않습니다. 원래 객체를 보존하고 추가 키 삭제·삭제/변경된 값 복구 후 원래 identity를 되돌립니다.전수 점검
packages와apps의 TypeScript/TSX 테스트 80개(패키지 79개, 앱 1개), 실제spyOn호출 218곳을 읽기 전용으로 점검했습니다. 의도적인 suite-wide spy의afterAll복구, 지역 fixture mock, RuleTester 코드 문자열은 실제 전역 교체와 구분했습니다.plugin.test.ts:console.errorcoordinator의 Date/console 4곳,loader의 HTTP 8곳,plugin의 process.on 1곳,profile의 console 2곳finally복구finally복구기존 기대값·matcher·테스트 이름·케이스를 유지했습니다. TypeScript AST 기반 비교에서 기존
expect관련 호출 1,534개가 그대로이며 삭제·skip·assertion 약화가 없습니다.기존 PR과의 겹침
열린 PR 72개의 변경 파일을 페이지 끝까지 확인했습니다. #755/#767은 아래 파일을 바꾸지만 이 전역 복구를 수행하지 않아, 코디네이터 승인에 따라 복구 hunk만 추가했습니다. 나중에 병합하는 PR에서 해당 복구 hunk의 단순 충돌을 해결해야 합니다.
packages/next-plugin/src/__tests__/coordinator.test.ts,loader.test.ts,plugin.test.ts.packages/plugin-utils/src/import-graph.test.ts,packages/rsbuild-plugin/src/__tests__/plugin.test.ts,packages/vite-plugin/src/__tests__/plugin.test.ts.packages/webpack-plugin/src/__tests__/loader.test.ts,plugin.test.ts.packages/next-plugin/src/__tests__/coordinator.test.ts.init-theme.browser.test.ts에서 구독 수명을 정리하지만 이번 DOM/저장값/matchMedia 복구는 하지 않습니다. import/teardown 겹침만 조정하면 됩니다.#755는 Rsbuild 오류 전파 동작을 바꾸며 해당 console 교체를 제거합니다. 이 PR은 그 동작 변경을 가져오지 않고 현재 테스트와 assertion을 보존해 복구만 보장합니다. #752의 Next 테스트 재구성은 별도 작업이며, 해당 재구성을 병합할 때 지역 복구 규칙을 유지해야 합니다.
실제 실행: 이전 / 이후
기존 Vite/Webpack 두 파일 뒤에 별도 observer 파일을 같은
bun test프로세스로 실행했습니다. observer는 첫 테스트 전 preload에서 실제console.error참조를 저장하며 어떤 mock도 대신 복구하지 않습니다.env도 별도 후속 파일에서 재현했습니다: 이전에는 원래 객체 identity가
false(32 pass / 1 fail), 이후에는 identity·모든 키/값 복구가 모두true(33 pass / 0 fail)입니다. 환경변수 값 전체를 로그에 출력하지 않습니다.테마 테스트는 정방향/역방향 파일 순서와
--randomize --seed=1,7,42를 각각 기존 값이 없는 상태·서로 다른 기존 값이 있는 상태에서 실행했습니다. 10회 모두 7 pass / 0 fail이며 후속 파일에서 원래 attribute/저장값/matchMedia/window descriptor를 확인했습니다.새로 생기는 오류
없습니다. 빌드 동작과 공개 API는 변경하지 않습니다.
남는 한계 / 릴리스
dist만 배포하고 변경된 테스트 소스는 배포하지 않습니다.plugin-utils의 src 바로 아래 테스트가 만드는 빈.d.ts/.d.ts.map도 이전·이후 동일함을 비교했습니다.검증
bun run build(WASM 포함) 통과.bun test: 5,498 pass, 0 fail, 89 snapshots, 함수/라인 커버리지 100%.bun lint: 0 errors, 기존 경고 2개만 유지.cargo fmt --all -- --check, Rust 1.99 workspace clippy-D warnings,cargo test --workspace통과. Rust 파일 변경 없음.CARGO_BUILD_JOBS=2, 전체 자식 프로세스 합계 6 GiB watchdog에서 실행했습니다.ad51616cf80d83f50a1a0d36ac3ea523df7052a1의 표준 pre-commit(lint + tarpaulin + Bun) 통과: CI unset,CARGO_BUILD_JOBS=2, 12 GiB watchdog. 짧게 사라지는 MSYS launcher로 인한 ancestry 계측 누락을 피하기 위해 같은 커밋의 동일 훅을 foreground로 다시 실행했고, 전체 자식 합계 관측 peak 5,128,802,304 bytes, exit 0을 확인했습니다. 커밋/소스는 변경하거나 amend하지 않았습니다.APPROVE, confidenceHIGH.ad51616cf80d83f50a1a0d36ac3ea523df7052a1: success.publish,benchmark,vinext-rsc-css-e2e,landing-next-e2e네 작업 모두 성공했습니다.--fail-under 100게이트 통과를 코디네이터가 확인했습니다.gh pr ready 778완료.isDraft: false,mergeStateStatus: CLEAN,mergeable: MERGEABLE확인. 병합·승인·닫기는 하지 않았습니다.