feat(worker): implement pageerror event from a worker (#2795)

Fixes #2761
This commit is contained in:
Yaniv Efraim 2018-06-26 01:10:36 +03:00 committed by Andrey Lushnikov
parent 811415bc8c
commit aae73f5fd7
3 changed files with 10 additions and 2 deletions

View File

@ -102,7 +102,7 @@ class Page extends EventEmitter {
return;
}
const session = client._createSession(event.targetInfo.type, event.sessionId);
const worker = new Worker(session, event.targetInfo.url, this._addConsoleMessage.bind(this));
const worker = new Worker(session, event.targetInfo.url, this._addConsoleMessage.bind(this), this._handleException.bind(this));
this._workers.set(event.sessionId, worker);
this.emit(Page.Events.WorkerCreated, worker);

View File

@ -22,8 +22,9 @@ class Worker extends EventEmitter {
* @param {Puppeteer.CDPSession} client
* @param {string} url
* @param {function(!string, !Array<!JSHandle>)} consoleAPICalled
* @param {function(!Protocol.Runtime.ExceptionDetails)} exceptionThrown
*/
constructor(client, url, consoleAPICalled) {
constructor(client, url, consoleAPICalled, exceptionThrown) {
super();
this._client = client;
this._url = url;
@ -39,6 +40,7 @@ class Worker extends EventEmitter {
this._client.send('Runtime.enable', {}).catch(debugError);
this._client.on('Runtime.consoleAPICalled', event => consoleAPICalled(event.type, event.args.map(jsHandleFactory)));
this._client.on('Runtime.exceptionThrown', exception => exceptionThrown(exception.exceptionDetails));
}
/**

View File

@ -48,5 +48,11 @@ module.exports.addTests = function({testRunner, expect}) {
const worker = await workerCreatedPromise;
expect(await (await worker.executionContext()).evaluate('1+1')).toBe(2);
});
it('should report errors', async function({page}) {
const errorPromise = new Promise(x => page.on('pageerror', x));
await page.evaluate(() => new Worker(`data:text/javascript, throw new Error('this is my error');`));
const errorLog = await errorPromise;
expect(errorLog.message).toContain('this is my error');
});
});
};