chore(e2e): collect coverage upon E2E test suite completion

#5
This commit is contained in:
Kirill Gavrilov 2025-10-20 01:08:00 +03:00
parent 8c674b5dcf
commit da38f73330
3 changed files with 57 additions and 1 deletions

View file

@ -3,10 +3,14 @@
"type": "module",
"private": true,
"scripts": {
"pretest": "pnpm --dir .. run build",
"pretest": "pnpm --dir .. run build:coverage",
"test": "wdio run wdio.conf.ts"
},
"devDependencies": {
"@types/istanbul-lib-coverage": "2.0.6",
"@types/istanbul-lib-report": "3.0.3",
"@types/istanbul-lib-source-maps": "4.0.4",
"@types/istanbul-reports": "3.0.4",
"@wdio/cli": "9.20.0",
"@wdio/globals": "9.17.0",
"@wdio/local-runner": "9.20.0",
@ -14,6 +18,10 @@
"@wdio/spec-reporter": "9.20.0",
"electron": "37.6.0",
"expect-webdriverio": "5.4.3",
"istanbul-lib-coverage": "3.2.2",
"istanbul-lib-report": "3.0.1",
"istanbul-lib-source-maps": "5.0.6",
"istanbul-reports": "3.2.0",
"obsidian": "1.10.0",
"wdio-electron-service": "8.1.0",
"webdriverio": "9.20.0"

44
e2e/utils/coverage.ts Normal file
View file

@ -0,0 +1,44 @@
import type { CoverageMapData } from 'istanbul-lib-coverage'
import * as fs from 'node:fs'
import * as path from 'node:path'
import { createCoverageMap } from 'istanbul-lib-coverage'
import { createContext } from 'istanbul-lib-report'
import { createSourceMapStore } from 'istanbul-lib-source-maps'
import * as reports from 'istanbul-reports'
export async function exportCoverageToLcov() {
const coverageMap = createCoverageMap(await collectCoverageData())
const remappedCoverageMap = await createSourceMapStore().transformCoverage(coverageMap)
const context = createContext({
coverageMap: remappedCoverageMap,
dir: 'out/coverage',
sourceFinder: (filePath: string) => {
return fs.readFileSync(restorePathRelativeToMainPluginProject(filePath), 'utf-8')
},
})
reports.create('lcov').execute(context)
}
const cwd = process.cwd()
function restorePathRelativeToMainPluginProject(filePath: string) {
const relativePart = path.relative(cwd, filePath)
return path.join(path.resolve(cwd, '..'), relativePart)
}
async function collectCoverageData() {
const coverageData = await browser.execute(() => {
return window.__coverage__
})
if (!coverageData) throw new Error('No coverage data found!')
return coverageData
}
declare global {
interface Window {
__coverage__?: CoverageMapData
}
}

View file

@ -1,5 +1,6 @@
/// <reference types="wdio-electron-service" />
import ObsidianApp from './specs/pageobjects/obsidian-app.page'
import { exportCoverageToLcov } from './utils/coverage'
const debug = process.env.DEBUG
const ONE_DAY = 24 * 60 * 60 * 1000
@ -40,4 +41,7 @@ export const config: WebdriverIO.Config = {
await ObsidianApp.createAndOpenFreshVault()
await ObsidianApp.activateTimecodesPlugin()
},
afterSuite: async () => {
await exportCoverageToLcov()
},
}