mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
feat: async stacks for all "async" public methods (#3262)
This patch traces all public async methods and wraps them in a helper method that tags the sync stack trace. Later on, if the method call throws an exception, we add a captured stack trace to the original stack trace with the "--ASYNC--" heading. An example of a stack trace: ``` Error: net::ERR_ABORTED at http://localhost:8907/empty.html at navigate (/Users/lushnikov/prog/puppeteer/lib/Page.js:622:37) at process._tickCallback (internal/process/next_tick.js:68:7) -- ASYNC -- at Page.<anonymous> (/Users/lushnikov/prog/puppeteer/lib/helper.js:147:27) at fit (/Users/lushnikov/prog/puppeteer/test/page.spec.js:546:18) at process._tickCallback (internal/process/next_tick.js:68:7) ```
This commit is contained in:
@@ -65,6 +65,25 @@ module.exports.addTests = function({testRunner, expect, headless}) {
|
||||
});
|
||||
});
|
||||
|
||||
let asyncawait = true;
|
||||
try {
|
||||
new Function('async function foo() {await 1}');
|
||||
} catch (e) {
|
||||
asyncawait = false;
|
||||
}
|
||||
(asyncawait ? describe : xdescribe)('Async stacks', () => {
|
||||
it('should work', async({page, server}) => {
|
||||
server.setRoute('/empty.html', (req, res) => {
|
||||
res.statusCode = 204;
|
||||
res.end();
|
||||
});
|
||||
let error = null;
|
||||
await page.goto(server.EMPTY_PAGE).catch(e => error = e);
|
||||
expect(error).not.toBe(null);
|
||||
expect(error.message).toContain('net::ERR_ABORTED');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Page.Events.error', function() {
|
||||
it('should throw when page crashes', async({page}) => {
|
||||
let error = null;
|
||||
|
||||
Reference in New Issue
Block a user