codeceptjs-monocart-coverage
Advanced tools
Comparing version 1.0.0 to 1.0.1
125
lib/index.js
const { | ||
container, recorder, event | ||
} = require('codeceptjs'); | ||
const { CoverageReport } = require('monocart-coverage-reports'); | ||
const { CoverageReport, CDPClient } = require('monocart-coverage-reports'); | ||
@@ -24,47 +24,62 @@ /** | ||
Playwright: { | ||
startCoverage: async (page) => { | ||
await Promise.all([ | ||
page.coverage.startJSCoverage({ | ||
resetOnNavigation: false | ||
}), | ||
page.coverage.startCSSCoverage({ | ||
resetOnNavigation: false | ||
}) | ||
]); | ||
}, | ||
takeCoverage: async (page, coverageReport) => { | ||
const [jsCoverage, cssCoverage] = await Promise.all([ | ||
page.coverage.stopJSCoverage(), | ||
page.coverage.stopCSSCoverage() | ||
]); | ||
const coverageList = [... jsCoverage, ... cssCoverage]; | ||
await coverageReport.add(coverageList); | ||
startCoverage: async (helper) => { | ||
const page = helper.page; | ||
if (!page || !page.coverage) { | ||
// Coverage APIs are only supported on Chromium-based browsers | ||
return; | ||
} | ||
const session = await page.context().newCDPSession(page); | ||
const coverageClient = await CDPClient({ | ||
session | ||
}); | ||
// both js and css coverage | ||
await coverageClient.startCoverage(); | ||
return coverageClient; | ||
} | ||
}, | ||
Puppeteer: { | ||
startCoverage: async (page) => { | ||
await Promise.all([ | ||
page.coverage.startJSCoverage({ | ||
resetOnNavigation: false, | ||
includeRawScriptCoverage: true | ||
}), | ||
page.coverage.startCSSCoverage({ | ||
resetOnNavigation: false | ||
}) | ||
]); | ||
}, | ||
takeCoverage: async (page, coverageReport) => { | ||
const [jsCoverage, cssCoverage] = await Promise.all([ | ||
page.coverage.stopJSCoverage(), | ||
page.coverage.stopCSSCoverage() | ||
]); | ||
// to raw V8 script coverage | ||
const coverageList = [... jsCoverage.map((it) => { | ||
return { | ||
source: it.text, | ||
... it.rawScriptCoverage | ||
}; | ||
}), ... cssCoverage]; | ||
await coverageReport.add(coverageList); | ||
startCoverage: async (helper) => { | ||
const page = helper.page; | ||
if (!page || !page.coverage) { | ||
// Coverage APIs are only supported on Chromium-based browsers | ||
return; | ||
} | ||
const session = await page.target().createCDPSession(); | ||
const coverageClient = await CDPClient({ | ||
session | ||
}); | ||
// both js and css coverage | ||
await coverageClient.startCoverage(); | ||
return coverageClient; | ||
} | ||
}, | ||
WebDriver: { | ||
startCoverage: async (helper) => { | ||
// WebDriver to puppeteer API | ||
const puppeteer = await helper.browser.getPuppeteer(); | ||
// console.log(helper); | ||
if (!puppeteer) { | ||
return; | ||
} | ||
const page = (await puppeteer.pages())[0]; | ||
if (!page || !page.coverage) { | ||
// Coverage APIs are only supported on Chromium-based browsers | ||
return; | ||
} | ||
const session = await page.target().createCDPSession(); | ||
const coverageClient = await CDPClient({ | ||
session | ||
}); | ||
// both js and css coverage | ||
await coverageClient.startCoverage(); | ||
return coverageClient; | ||
} | ||
} | ||
@@ -75,3 +90,3 @@ }; | ||
const helpers = container.helpers(); | ||
let coverageRunning = false; | ||
let coverageClient; | ||
@@ -96,2 +111,3 @@ const v8Names = Object.keys(v8CoverageHelpers); | ||
event.dispatcher.on(event.all.after, async () => { | ||
// console.log(`generate coverage =================== ${helperName}`); | ||
await coverageReport.generate(); | ||
@@ -104,10 +120,7 @@ }); | ||
recorder.add('start coverage', async () => { | ||
if (coverageRunning) { | ||
if (coverageClient) { | ||
return; | ||
} | ||
if (!helper.page || !helper.page.coverage) { | ||
return; | ||
} | ||
coverageRunning = true; | ||
await v8Helper.startCoverage(helper.page); | ||
// console.log(`start coverage =================== ${helperName}`); | ||
coverageClient = await v8Helper.startCoverage(helper); | ||
}, true); | ||
@@ -118,13 +131,13 @@ }); | ||
event.dispatcher.on(event.test.after, (test) => { | ||
recorder.add('take coverage', async () => { | ||
if (!coverageRunning) { | ||
recorder.add('stop coverage', async () => { | ||
if (!coverageClient) { | ||
return; | ||
} | ||
if (!helper.page || !helper.page.coverage) { | ||
return; | ||
} | ||
coverageRunning = false; | ||
await v8Helper.takeCoverage(helper.page, coverageReport); | ||
// console.log(`stop coverage =================== ${helperName}`); | ||
const coverageData = await coverageClient.stopCoverage(); | ||
await coverageClient.close(); | ||
coverageClient = null; | ||
await coverageReport.add(coverageData); | ||
}, true); | ||
}); | ||
}; |
{ | ||
"name": "codeceptjs-monocart-coverage", | ||
"version": "1.0.0", | ||
"version": "1.0.1", | ||
"description": "CodeceptJS Monocart Coverage Reports", | ||
@@ -26,12 +26,13 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"monocart-coverage-reports": "^2.5.7" | ||
"monocart-coverage-reports": "^2.7.8" | ||
}, | ||
"devDependencies": { | ||
"codeceptjs": "^3.5.14", | ||
"codeceptjs": "^3.5.15", | ||
"eslint": "^8.57.0", | ||
"eslint-config-plus": "^1.0.6", | ||
"eslint-plugin-codeceptjs": "^1.3.0", | ||
"playwright": "^1.41.2", | ||
"puppeteer": "^22.2.0" | ||
"playwright": "^1.42.1", | ||
"puppeteer": "^22.6.1", | ||
"webdriverio": "^8.35.1" | ||
} | ||
} |
@@ -39,2 +39,6 @@ # codeceptjs-monocart-coverage | ||
// } | ||
// WebDriver: { | ||
// url: 'http://localhost', | ||
// browser: 'chrome' | ||
// } | ||
} | ||
@@ -41,0 +45,0 @@ } |
8662
150
47
7