-
Notifications
You must be signed in to change notification settings - Fork 0
/
global-teardown.ts
59 lines (47 loc) · 1.86 KB
/
global-teardown.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import fs from 'fs';
import { CDPClient } from 'monocart-coverage-reports';
import { addCoverageReport } from 'monocart-reporter';
import path from 'path';
import { PlaywrightTestConfig, TestInfo } from 'playwright/test';
import { fileURLToPath } from 'url';
export default async (config: PlaywrightTestConfig) => {
const client = await CDPClient({
port: 9229
});
if (!client) {
console.log('Failed to connect to the server port 9229');
return;
}
const dir = await client.writeCoverage();
// @ts-expect-error: missing type definition
await client.close();
if (!fs.existsSync(dir)) {
console.log('NODE_V8_COVERAGE directory does not exist', dir);
return;
}
const files = fs.readdirSync(dir);
for (const filename of files) {
const content = fs.readFileSync(path.resolve(dir, filename)).toString('utf-8');
const json = JSON.parse(content);
let coverageList: Array<{ url: string; source: string }> = json.result;
coverageList = coverageList.filter((entry) => entry.url && !entry.url.includes('node_modules'));
coverageList = coverageList.filter((entry) => !entry.url.startsWith('node:'));
coverageList = coverageList.filter((entry) => entry.url.includes('build/server'));
if (!coverageList.length) {
continue;
}
// attach source content
coverageList.forEach((entry) => {
const filePath = fileURLToPath(entry.url);
if (fs.existsSync(filePath)) {
entry.source = fs.readFileSync(filePath).toString('utf8');
} else {
console.log('could not locate source content for entry', filePath);
}
});
const mockTestInfo = {
config
} as TestInfo;
await addCoverageReport(coverageList, mockTestInfo);
}
};