From b332de51906587b394ec2ff9c1a160c40f49e356 Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 16 Feb 2026 14:28:42 +0100 Subject: [PATCH 1/2] fix: support manual overrides via `page.route` --- src/fixture.ts | 67 ++++++++++++++++++++--------------------- tests/overrides.test.ts | 31 +++++++++++++------ 2 files changed, 55 insertions(+), 43 deletions(-) diff --git a/src/fixture.ts b/src/fixture.ts index 75daec4..264467a 100644 --- a/src/fixture.ts +++ b/src/fixture.ts @@ -77,8 +77,10 @@ class SetupPlaywrightApi extends SetupApi { } public async enable(): Promise { + const { context } = this.options + // Handle HTTP requests. - await this.options.context.route( + await context.route( INTERNAL_MATCH_ALL_REG_EXP, async (route: Route, request: PlaywrightRequest) => { const fetchRequest = new Request(request.url(), { @@ -97,7 +99,7 @@ class SetupPlaywrightApi extends SetupApi { this.options.skipAssetRequests && isCommonAssetRequest(fetchRequest) ) { - return route.continue() + return route.fallback() } const handlers = this.handlersController @@ -144,46 +146,43 @@ class SetupPlaywrightApi extends SetupApi { }) } - return route.continue() + return route.fallback() }, ) // Handle WebSocket connections. - await this.options.context.routeWebSocket( - INTERNAL_MATCH_ALL_REG_EXP, - async (route) => { - const allWebSocketHandlers = this.handlersController - .currentHandlers() - .filter((handler) => { - return handler instanceof WebSocketHandler - }) + await context.routeWebSocket(INTERNAL_MATCH_ALL_REG_EXP, async (route) => { + const allWebSocketHandlers = this.handlersController + .currentHandlers() + .filter((handler) => { + return handler instanceof WebSocketHandler + }) - if (allWebSocketHandlers.length === 0) { - route.connectToServer() - return - } + if (allWebSocketHandlers.length === 0) { + route.connectToServer() + return + } - const client = new PlaywrightWebSocketClientConnection(route) - const server = new PlaywrightWebSocketServerConnection(route) + const client = new PlaywrightWebSocketClientConnection(route) + const server = new PlaywrightWebSocketServerConnection(route) - const pages = this.options.context.pages() - const lastPage = pages[pages.length - 1] - const baseUrl = lastPage ? this.getPageUrl(lastPage) : undefined + const pages = this.options.context.pages() + const lastPage = pages[pages.length - 1] + const baseUrl = lastPage ? this.getPageUrl(lastPage) : undefined - for (const handler of allWebSocketHandlers) { - await handler.run( - { - client, - server, - info: { protocols: [] }, - }, - { - baseUrl, - }, - ) - } - }, - ) + for (const handler of allWebSocketHandlers) { + await handler.run( + { + client, + server, + info: { protocols: [] }, + }, + { + baseUrl, + }, + ) + } + }) } public async disable(): Promise { diff --git a/tests/overrides.test.ts b/tests/overrides.test.ts index 677fc72..760556e 100644 --- a/tests/overrides.test.ts +++ b/tests/overrides.test.ts @@ -24,14 +24,6 @@ const test = testBase.extend({ ], }) -test.beforeEach(({ network }) => { - network.use( - http.get('*', () => { - return new HttpResponse('fallback') - }), - ) -}) - test('responds with the override mocked response', async ({ network, page, @@ -52,7 +44,13 @@ test('responds with the override mocked response', async ({ expect(data).toBe('hello world') }) -test('responds with a fallback response', async ({ page }) => { +test('responds with a fallback response', async ({ network, page }) => { + network.use( + http.get('*', () => { + return new HttpResponse('fallback') + }), + ) + await page.goto('/') const data = await page.evaluate(async () => { @@ -62,3 +60,18 @@ test('responds with a fallback response', async ({ page }) => { expect(data).toBe('fallback') }) + +test('respects manual overrides added via `page.route`', async ({ page }) => { + await page.goto('/') + + await page.route('/resource', (route) => { + return route.fulfill({ body: 'manual-override' }) + }) + + const data = await page.evaluate(async () => { + const response = await fetch('/resource') + return response.text() + }) + + expect(data).toBe('manual-override') +}) From 9ff7029babcda29e8eab51a20e3cdbacbc4b432f Mon Sep 17 00:00:00 2001 From: Artem Zakharchenko Date: Mon, 16 Feb 2026 14:29:13 +0100 Subject: [PATCH 2/2] test: add `context.route` test case --- tests/overrides.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/overrides.test.ts b/tests/overrides.test.ts index 760556e..fa8039b 100644 --- a/tests/overrides.test.ts +++ b/tests/overrides.test.ts @@ -61,6 +61,24 @@ test('responds with a fallback response', async ({ network, page }) => { expect(data).toBe('fallback') }) +test('respects manual overrides added via `context.route`', async ({ + context, + page, +}) => { + await page.goto('/') + + await context.route('/resource', (route) => { + return route.fulfill({ body: 'manual-override' }) + }) + + const data = await page.evaluate(async () => { + const response = await fetch('/resource') + return response.text() + }) + + expect(data).toBe('manual-override') +}) + test('respects manual overrides added via `page.route`', async ({ page }) => { await page.goto('/')