-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun-tests-ci.js
More file actions
75 lines (69 loc) · 2.42 KB
/
Copy pathrun-tests-ci.js
File metadata and controls
75 lines (69 loc) · 2.42 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import fs from 'fs';
import path from 'path';
import puppeteer from "puppeteer";
import { reportResults } from 'twd-js/runner-ci';
let __dirname = path.resolve();
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox'],
});
const page = await browser.newPage();
console.time('Total Test Time');
try {
// Navigate to your development server
console.log('Navigating to http://localhost:5173 ...');
await page.goto('http://localhost:5173');
// wait to load data-testid="twd-sidebar"
await page.waitForSelector('[data-testid="twd-sidebar"]', { timeout: 10000 });
console.log('Page loaded. Starting tests...');
// reload page
// Execute all tests
const { handlers, testStatus } = await page.evaluate(async () => {
const TestRunner = window.__testRunner;
const testStatus = [];
const runner = new TestRunner({
onStart: () => {},
onPass: (test) => {
testStatus.push({ id: test.id, status: "pass" });
},
onFail: (test, err) => {
testStatus.push({ id: test.id, status: "fail", error: err.message });
},
onSkip: (test) => {
testStatus.push({ id: test.id, status: "skip" });
},
});
const handlers = await runner.runAll();
return { handlers: Array.from(handlers.values()), testStatus };
});
console.log(`Tests to report: ${testStatus.length}`);
// Display results in console
reportResults(handlers, testStatus);
const coverage = await page.evaluate(() => window.__coverage__);
if (coverage) {
console.log('Collecting code coverage data...');
const coverageDir = path.resolve(__dirname, './coverage');
const nycDir = path.resolve(__dirname, './.nyc_output');
if (!fs.existsSync(nycDir)) {
fs.mkdirSync(nycDir);
}
if (!fs.existsSync(coverageDir)) {
fs.mkdirSync(coverageDir);
}
const coveragePath = path.join(nycDir, 'out.json');
fs.writeFileSync(coveragePath, JSON.stringify(coverage));
console.log(`Code coverage data written to ${coveragePath}`);
} else {
console.log('No code coverage data found.');
}
// Exit with appropriate code
const hasFailures = testStatus.some(test => test.status === 'fail');
console.timeEnd('Total Test Time');
process.exit(hasFailures ? 1 : 0);
} catch (error) {
console.error('Error running tests:', error);
process.exit(1);
} finally {
console.log('Closing browser...');
await browser.close();
}