From 9e205662443da38708562e0b21b48c90d3ff762c Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Fri, 5 Mar 2021 21:25:14 -0800 Subject: [PATCH] fix(postData): do not require content type when retrieving post data (#5736) --- src/client/network.ts | 9 ++++---- test/page-wait-for-request.spec.ts | 37 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/client/network.ts b/src/client/network.ts index 44c96dc726..35b61a1e80 100644 --- a/src/client/network.ts +++ b/src/client/network.ts @@ -113,9 +113,6 @@ export class Request extends ChannelOwner = {}; const parsed = new URLSearchParams(postData); @@ -124,7 +121,11 @@ export class Request extends ChannelOwner { + await page.goto(server.EMPTY_PAGE); + const [request] = await Promise.all([ + page.waitForRequest('**'), + page.evaluate(({url}) => { + const request = new Request(url, { + method: 'POST', + body: JSON.stringify({ value: 42 }), + }); + request.headers.set('content-type', ''); + return fetch(request); + }, {url: server.PREFIX + '/title.html'}) + ]); + expect(request.postDataJSON()).toEqual({ value: 42 }); +}); + +it('should throw on invalid JSON in post data', async ({page, server}) => { + await page.goto(server.EMPTY_PAGE); + const [request] = await Promise.all([ + page.waitForRequest('**'), + page.evaluate(({url}) => { + const request = new Request(url, { + method: 'POST', + body: '', + }); + return fetch(request); + }, {url: server.PREFIX + '/title.html'}) + ]); + let error; + try { + request.postDataJSON(); + } catch (e) { + error = e; + } + expect(error.message).toContain('POST data is not a valid JSON object: '); +});