Skip to content

Commit 842d768

Browse files
committed
feat: add collect coverage
1 parent d3c3b96 commit 842d768

5 files changed

Lines changed: 287 additions & 4 deletions

File tree

.github/workflows/ci.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323

2424
- name: Start Vite dev server
2525
run: |
26-
nohup npm run dev > vite.log 2>&1 &
26+
nohup npm run dev:ci > vite.log 2>&1 &
2727
npx wait-on http://localhost:5173
2828
env:
2929
CI: true
@@ -32,4 +32,7 @@ jobs:
3232
run: npm run test:ci
3333
env:
3434
CI: true
35-
35+
36+
- name: Display coverage
37+
run: |
38+
npm run collect:coverage:text

package-lock.json

Lines changed: 244 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@
55
"type": "module",
66
"scripts": {
77
"dev": "vite",
8+
"dev:ci": "CI=true VITE_COVERAGE=true vite",
89
"build": "tsc -b && vite build",
910
"lint": "eslint .",
1011
"test": "vitest",
1112
"preview": "vite preview",
1213
"serve": "json-server --watch data/data.json --routes data/routes.json --port 3001",
1314
"serve:dev": "npm-run-all --parallel serve dev",
14-
"test:ci": "node scripts/run-tests-ci.js"
15+
"test:ci": "node scripts/run-tests-ci.js",
16+
"collect:coverage:html": "npx nyc report --reporter=html --report-dir=coverage",
17+
"collect:coverage:lcov": "npx nyc report --reporter=lcov --report-dir=coverage",
18+
"collect:coverage:text": "npx nyc report --reporter=text --report-dir=coverage"
1519
},
1620
"dependencies": {
1721
"@radix-ui/react-avatar": "^1.1.4",
@@ -52,6 +56,7 @@
5256
"globals": "^16.0.0",
5357
"jsdom": "^26.1.0",
5458
"npm-run-all": "^4.1.5",
59+
"nyc": "^17.1.0",
5560
"puppeteer": "^24.29.1",
5661
"typescript": "~5.7.2",
5762
"typescript-eslint": "^8.26.1",

scripts/run-tests-ci.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
import fs from 'fs';
2+
import path from 'path';
13
import puppeteer from "puppeteer";
24
import { reportResults } from 'twd-js/runner-ci';
35

6+
let __dirname = path.resolve();
7+
48
const browser = await puppeteer.launch({
59
headless: true,
610
args: ['--no-sandbox', '--disable-setuid-sandbox'],
@@ -39,6 +43,24 @@ try {
3943
// Display results in console
4044
reportResults(handlers, testStatus);
4145

46+
const coverage = await page.evaluate(() => window.__coverage__);
47+
if (coverage) {
48+
console.log('Collecting code coverage data...');
49+
const coverageDir = path.resolve(__dirname, './coverage');
50+
const nycDir = path.resolve(__dirname, './.nyc_output');
51+
if (!fs.existsSync(nycDir)) {
52+
fs.mkdirSync(nycDir);
53+
}
54+
if (!fs.existsSync(coverageDir)) {
55+
fs.mkdirSync(coverageDir);
56+
}
57+
const coveragePath = path.join(nycDir, 'out.json');
58+
fs.writeFileSync(coveragePath, JSON.stringify(coverage));
59+
console.log(`Code coverage data written to ${coveragePath}`);
60+
} else {
61+
console.log('No code coverage data found.');
62+
}
63+
4264
// Exit with appropriate code
4365
const hasFailures = testStatus.some(test => test.status === 'fail');
4466
console.timeEnd('Total Test Time');

vite.config.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,21 @@ import path from "path"
33
import tailwindcss from "@tailwindcss/vite"
44
import { defineConfig } from 'vite'
55
import react from '@vitejs/plugin-react'
6+
// add plugin for code coverage
7+
import istanbul from 'vite-plugin-istanbul';
68

79
// https://vite.dev/config/
810
export default defineConfig({
911
plugins: [
1012
react(),
1113
tailwindcss(),
14+
// configure istanbul plugin
15+
istanbul({
16+
include: 'src/**/*',
17+
exclude: ['node_modules', 'tests/'],
18+
extension: ['.ts', '.tsx'],
19+
requireEnv: process.env.CI ? true : false,
20+
}),
1221
],
1322
resolve: {
1423
alias: {
@@ -20,4 +29,4 @@ export default defineConfig({
2029
ignored: ["**/data/data.json", "**data/routes.json"],
2130
},
2231
},
23-
})
32+
})

0 commit comments

Comments
 (0)