From 511e881ac85cf44ef5c382fd94ec62f034cc1c85 Mon Sep 17 00:00:00 2001 From: amandeepsingh333 Date: Fri, 10 Jan 2025 09:41:19 +0530 Subject: [PATCH] fixed test for discovery --- packages/core/src/install.js | 10 +++++----- packages/core/src/network.js | 21 +++++++++++++++++-- packages/core/test/discovery.test.js | 30 +++++++++------------------- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/packages/core/src/install.js b/packages/core/src/install.js index 01011e3b5..2d5b90751 100644 --- a/packages/core/src/install.js +++ b/packages/core/src/install.js @@ -177,11 +177,11 @@ export function chromium({ // default chromium revisions corresponds to v123.0.6312.58 chromium.revisions = { - linux: '1262506', - win64: '1262500', - win32: '1262500', - darwin: '1262506', - darwinArm: '1262509' + linux: '1368524', + win64: '1368503', + win32: '1368516', + darwin: '1368518', + darwinArm: '1368521' }; // export the namespace by default export * as default from './install.js'; diff --git a/packages/core/src/network.js b/packages/core/src/network.js index 5bdf5d3f2..a8c729e31 100644 --- a/packages/core/src/network.js +++ b/packages/core/src/network.js @@ -17,6 +17,7 @@ class RequestLifeCycleHandler { this.resolveResponseReceived = null; this.requestWillBeSent = new Promise((resolve) => (this.resolveRequestWillBeSent = resolve)); this.responseReceived = new Promise((resolve) => (this.resolveResponseReceived = resolve)); + this.isWorker = false; } } // The Interceptor class creates common handlers for dealing with intercepting asset requests @@ -216,10 +217,21 @@ export class Network { // otherwise set it to be pending until it is paused. _handleRequestWillBeSent = async event => { let { requestId, request, type } = event; - // do not handle data urls if (request.url.startsWith('data:')) return; + const isWorker = type === 'Worker' || + (request.url.endsWith('.js')); + + // Mark in the lifecycle handler if this is a worker request + this.#requestsLifeCycleHandler.get(requestId).isWorker = isWorker; + + // For worker requests, auto-resolve responseReceived since Chrome 131 won't fire it + if (isWorker) { + this.log.debug(`Auto-resolving responseReceived for worker request: ${request.url}`); + this.#requestsLifeCycleHandler.get(requestId).resolveResponseReceived(); + } + // Browsers handle URL encoding leniently. // This code checks for issues such as `%` and leading spaces and warns the user accordingly. decodeAndEncodeURLWithLogging(request.url, this.log, { @@ -302,7 +314,12 @@ export class Network { _handleLoadingFinished = async (session, event) => { let { requestId } = event; // wait for upto 2 seconds or check if response has been sent - await this.#requestsLifeCycleHandler.get(requestId).responseReceived; + const handler = this.#requestsLifeCycleHandler.get(requestId); + + // For worker requests, we don't need to wait for responseReceived + if (!handler.isWorker) { + await handler.responseReceived; + } let request = this.#requests.get(requestId); /* istanbul ignore if: race condition paranioa */ if (!request) return; diff --git a/packages/core/test/discovery.test.js b/packages/core/test/discovery.test.js index 574cf6fec..719d6504e 100644 --- a/packages/core/test/discovery.test.js +++ b/packages/core/test/discovery.test.js @@ -1,4 +1,4 @@ -import { sha256hash } from '@percy/client/utils'; +import { sha256hash, waitForTimeout } from '@percy/client/utils'; import { logger, api, setupTest, createTestServer, dedent } from './helpers/index.js'; import Percy from '@percy/core'; import { RESOURCE_CACHE_KEY } from '../src/discovery.js'; @@ -42,6 +42,7 @@ describe('Discovery', () => { delete process.env.PERCY_GZIP; api.reply('/builds/123/snapshots', ({ body }) => { + console.log("dsdsdd") // resource order is not important, stabilize it for testing captured.push(body.data.relationships.resources.data.sort((a, b) => ( a.attributes['resource-url'].localeCompare(b.attributes['resource-url']) @@ -791,7 +792,7 @@ describe('Discovery', () => { }); }); - it('captures requests from workers', async () => { + fit('captures requests from workers', async () => { // Fetch and Network events are inherently racey because they come from different processes. The // bug we are testing here happens specifically when the Network event comes after the Fetch // event. Using a stub, we can cause Network events to happen a few milliseconds later than they @@ -807,12 +808,8 @@ describe('Discovery', () => { server.reply('/worker.js', () => [200, 'text/javascript', dedent` self.addEventListener("message", async ({ data }) => { - try { - let response = await fetch(new Request(data)); - self.postMessage("done"); - } catch (error) { - self.postMessage("error"); - } + let response = await fetch(new Request(data)); + self.postMessage("done"); }); `]); @@ -827,10 +824,8 @@ describe('Discovery', () => { worker.addEventListener("message", ({ data }) => { document.body.classList.add(data); - console.log('Worker message received:', data); }); setTimeout(() => { - console.log('Sending message to worker'); worker.postMessage("http://localhost:8000/img.gif"); }, 100); @@ -838,17 +833,14 @@ describe('Discovery', () => { `]); - server.reply('/img.gif', () => [200, 'image/gif', 'GIF89a...']); - - await percy.snapshot({ + await percy.snapshot({ name: 'worker snapshot', url: 'http://localhost:8000', - waitForSelector: '.done', enableJavaScript: true, + waitForSelector: '.done', waitForTimeout: 1000 }); - await percy.idle(); let paths = server.requests.map(r => r[0]); expect(paths).toContain('/img.gif'); @@ -861,10 +853,6 @@ describe('Discovery', () => { }) ]) ); - if (!captured.length) { - console.log('No resources captured'); - console.log('Server requests:', server.requests); - } }); it('does not error on cancelled requests', async () => { @@ -2208,7 +2196,7 @@ describe('Discovery', () => { ])); }); - it('should fail to launch if the devtools address is not logged', async () => { + fit('should fail to launch if the devtools address is not logged', async () => { await expectAsync( Percy.start({ token: 'PERCY_TOKEN', @@ -2216,6 +2204,7 @@ describe('Discovery', () => { discovery: { launchOptions: { args: ['--remote-debugging-port=null'], + timeout: 5000 }, }, }) @@ -2229,7 +2218,6 @@ describe('Discovery', () => { expect(lastLogMessage.includes('Failed to launch browser')).toEqual(true); }); - it('should fail to launch after the timeout', async () => { await expectAsync(Percy.start({