feat(coverage): add an option to collect coverage of anonymous scripts (#2796)

This patch adds `reportAnonymousScripts` option to the `coverage.startJSCoverage` method. With this option, anonymous scripts are reported as well.

Fixes #2777
This commit is contained in:
Pavel Pomerantsev
2018-07-11 21:38:34 -04:00
committed by Andrey Lushnikov
parent 96c558d544
commit 12bc1e1a62
5 changed files with 47 additions and 13 deletions

View File

@@ -0,0 +1 @@
<script>eval('console.log("foo")')</script>

View File

@@ -38,12 +38,27 @@ module.exports.addTests = function({testRunner, expect}) {
expect(coverage.length).toBe(1);
expect(coverage[0].url).toBe('nicename.js');
});
it('should ignore anonymous scripts', async function({page, server}) {
await page.coverage.startJSCoverage();
await page.goto(server.EMPTY_PAGE);
await page.evaluate(() => console.log(1));
const coverage = await page.coverage.stopJSCoverage();
expect(coverage.length).toBe(0);
describe('anonymous scripts coverage', function() {
it('should ignore eval() scripts by default', async function({page, server}) {
await page.coverage.startJSCoverage();
await page.goto(server.PREFIX + '/jscoverage/eval.html');
const coverage = await page.coverage.stopJSCoverage();
expect(coverage.length).toBe(1);
});
it('shouldn\'t ignore eval() scripts if reportAnonymousScripts is true', async function({page, server}) {
await page.coverage.startJSCoverage({reportAnonymousScripts: true});
await page.goto(server.PREFIX + '/jscoverage/eval.html');
const coverage = await page.coverage.stopJSCoverage();
expect(coverage.length).toBe(2);
});
it('should ignore injected scripts regardless of reportAnonymousScripts', async function({page, server}) {
await page.coverage.startJSCoverage({reportAnonymousScripts: true});
await page.goto(server.EMPTY_PAGE);
await page.evaluate('console.log("foo")');
await page.evaluate(() => console.log('bar'));
const coverage = await page.coverage.stopJSCoverage();
expect(coverage.length).toBe(0);
});
});
it('should report multiple scripts', async function({page, server}) {
await page.coverage.startJSCoverage();