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: '); +});