fix(fetch): throw on network error (#8565)

This commit is contained in:
Yury Semikhatsky 2021-08-30 14:34:31 -07:00 committed by GitHub
parent 6d51ed6e4d
commit dd6dacb125
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 0 deletions

View file

@ -161,6 +161,7 @@ async function sendRequest(context: BrowserContext, url: URL, options: http.Requ
body
});
});
response.on('aborted', () => reject(new Error('aborted')));
response.on('error',reject);
});
request.on('error', reject);

View file

@ -49,6 +49,60 @@ it('should work', async ({context, server}) => {
expect(await response.text()).toBe('{"foo": "bar"}\n');
});
it('should throw on network error', async ({context, server}) => {
server.setRoute('/test', (req, res) => {
req.socket.destroy();
});
let error;
// @ts-expect-error
await context._fetch(server.PREFIX + '/test').catch(e => error = e);
expect(error.message).toContain('socket hang up');
});
it('should throw on network error after redirect', async ({context, server}) => {
server.setRedirect('/redirect', '/test');
server.setRoute('/test', (req, res) => {
req.socket.destroy();
});
let error;
// @ts-expect-error
await context._fetch(server.PREFIX + '/redirect').catch(e => error = e);
expect(error.message).toContain('socket hang up');
});
it('should throw on network error when sending body', async ({context, server}) => {
server.setRoute('/test', (req, res) => {
res.writeHead(200, {
'content-length': 4096,
'content-type': 'text/html',
});
res.write('<title>A');
res.uncork();
req.socket.destroy();
});
let error;
// @ts-expect-error
await context._fetch(server.PREFIX + '/test').catch(e => error = e);
expect(error.message).toContain('Error: aborted');
});
it('should throw on network error when sending body after redirect', async ({context, server}) => {
server.setRedirect('/redirect', '/test');
server.setRoute('/test', (req, res) => {
res.writeHead(200, {
'content-length': 4096,
'content-type': 'text/html',
});
res.write('<title>A');
res.uncork();
req.socket.destroy();
});
let error;
// @ts-expect-error
await context._fetch(server.PREFIX + '/redirect').catch(e => error = e);
expect(error.message).toContain('Error: aborted');
});
it('should add session cookies to request', async ({context, server}) => {
await context.addCookies([{
name: 'username',