From 1ad6c8af6fdd568865a90951123b21925b0f944d Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Thu, 9 Sep 2021 12:27:57 -0700 Subject: [PATCH] test: response finish hangs when page closes (#8816) --- tests/page/page-network-response.spec.ts | 42 ++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/page/page-network-response.spec.ts b/tests/page/page-network-response.spec.ts index 19501931cb..d78034a00c 100644 --- a/tests/page/page-network-response.spec.ts +++ b/tests/page/page-network-response.spec.ts @@ -89,6 +89,48 @@ it('should wait until response completes', async ({page, server}) => { expect(await responseText).toBe('hello world!'); }); +it('should reject response.finished if page closes', async ({page, server}) => { + it.fixme(); + await page.goto(server.EMPTY_PAGE); + server.setRoute('/get', (req, res) => { + // In Firefox, |fetch| will be hanging until it receives |Content-Type| header + // from server. + res.setHeader('Content-Type', 'text/plain; charset=utf-8'); + res.write('hello '); + }); + // send request and wait for server response + const [pageResponse] = await Promise.all([ + page.waitForEvent('response'), + page.evaluate(() => fetch('./get', { method: 'GET'})), + ]); + + const finishPromise = pageResponse.finished().catch(e => e); + await page.close(); + const error = await finishPromise; + expect(error.message).toContain('closed'); +}); + +it('should reject response.finished if context closes', async ({page, server}) => { + it.fixme(); + await page.goto(server.EMPTY_PAGE); + server.setRoute('/get', (req, res) => { + // In Firefox, |fetch| will be hanging until it receives |Content-Type| header + // from server. + res.setHeader('Content-Type', 'text/plain; charset=utf-8'); + res.write('hello '); + }); + // send request and wait for server response + const [pageResponse] = await Promise.all([ + page.waitForEvent('response'), + page.evaluate(() => fetch('./get', { method: 'GET'})), + ]); + + const finishPromise = pageResponse.finished().catch(e => e); + await page.context().close(); + const error = await finishPromise; + expect(error.message).toContain('closed'); +}); + it('should return json', async ({page, server}) => { const response = await page.goto(server.PREFIX + '/simple.json'); expect(await response.json()).toEqual({foo: 'bar'});