Skip to content

Commit 486576f

Browse files
authored
fix(tests): prevent v8 coverage segfault on large codebase (#877)
* fix(tests): prevent v8 coverage segfault on large codebase Fixes segmentation fault when running `pnpm cover` by adding memory management and processing concurrency options. Changes: - Hoist logger to module scope in cover.mjs to fix ReferenceError - Use NODE_OPTIONS with --max-old-space-size=8192 for vitest coverage - Add processingConcurrency: 1 to vitest config to prevent v8 crashes - Add reportOnFailure: true and explicit reportsDirectory The segfault occurred because v8 coverage was processing too much data at once without sufficient memory. These changes allow the coverage command to complete successfully with 2,255 tests and 196 test files. Test Results: - 196 test files passed - 2,255 tests passed, 2 skipped - Type Coverage: 98.16% - Code Coverage: 37.17% - Cumulative: 67.66% * docs: update coverage badges with actual test coverage numbers Updates coverage badges to reflect actual test results: - Code Coverage: 37.17% (yellow badge) - Type Coverage: 98.16% (green badge) Based on test run with: - 196 test files passed - 2,255 tests passed (2 skipped) - Duration: 11.91s
1 parent 0b4870c commit 486576f

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
[![Socket Badge](https://socket.dev/api/badge/npm/package/socket)](https://socket.dev/npm/package/socket)
44
[![CI](https://github.com/SocketDev/socket-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/SocketDev/socket-cli/actions/workflows/ci.yml)
5-
![Test Coverage](https://img.shields.io/badge/test--coverage-90%25-brightgreen)
6-
![Type Coverage](https://img.shields.io/badge/type--coverage-95%25-brightgreen)
5+
![Code Coverage](https://img.shields.io/badge/code--coverage-37.17%25-yellow)
6+
![Type Coverage](https://img.shields.io/badge/type--coverage-98.16%25-brightgreen)
77

88
[![Follow @SocketSecurity](https://img.shields.io/twitter/follow/SocketSecurity?style=social)](https://twitter.com/SocketSecurity)
99

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"test:prepare": "dotenvx -q run -f .env.test -- pnpm build && del-cli 'test/**/node_modules'",
5757
"test:unit": "dotenvx -q run -f .env.test -- vitest run",
5858
"test:unit:update": "dotenvx -q run -f .env.test -- vitest run --update",
59-
"test:unit:coverage": "dotenvx -q run -f .env.test -- vitest run --coverage",
59+
"test:unit:coverage": "NODE_OPTIONS='--max-old-space-size=8192' dotenvx -q run -f .env.test -- vitest run --coverage",
6060
"test:validate": "node --import=./scripts/load.mjs scripts/validate-tests.mjs",
6161
"test:wrapper": "node --import=./scripts/load.mjs scripts/test-wrapper.mjs",
6262
"test-ci": "run-s test:*",

packages/cli/scripts/cover.mjs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@ import { WIN32 } from '@socketsecurity/lib/constants/platform'
2020
import { getDefaultLogger } from '@socketsecurity/lib/logger'
2121
import { spawn } from '@socketsecurity/lib/spawn'
2222

23+
const logger = getDefaultLogger()
24+
2325
/**
2426
* Print a header message.
2527
*/
2628
function printHeader(message) {
27-
const logger = getDefaultLogger()
28-
logger.error('\n═══════════════════════════════════════════════════════')
29+
logger.error(
30+
'\n═══════════════════════════════════════════════════════',
31+
)
2932
logger.error(` ${message}`)
3033
logger.error('═══════════════════════════════════════════════════════\n')
3134
}

packages/cli/vitest.config.mts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ export default defineConfig({
8989
coverage: {
9090
provider: 'v8',
9191
reporter: ['text', 'json', 'html', 'lcov', 'clover'],
92+
// Prevent v8 coverage segfaults by processing in smaller chunks.
93+
processingConcurrency: 1,
94+
// Use less memory-intensive options.
95+
reportOnFailure: true,
96+
reportsDirectory: './coverage',
9297
exclude: [
9398
'**/*.config.*',
9499
'**/node_modules/**',

0 commit comments

Comments
 (0)