fix: Use internal PropertySymbol.location in BrowserFrameURL to avoid mock interference #1964
+94
−1
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.
Problem
When tests mock
window.locationwith a partial mock (e.g.,jest.spyOn(window, 'location', 'get').mockReturnValue({ reload: jest.fn() })), theBrowserFrameURL.getRelativeURLmethod fails becauselocation.hrefis undefined from the mock.This causes:
about:blank(which hasorigin: null)History.pushState\ fails:null !== 'http://localhost'`historylibrary tries fallback towindow.location.assign()assign, causing confusing errorsSolution
Use
frame.window[PropertySymbol.location].hrefinstead offrame.window.location.href. This accesses the internal Location object via Symbol property, which isn't affected by mocks on the public getter.Testing
Tested against a large React test suite (~26,000 tests) that was failing with this issue. After the fix, tests pass successfully.