diff --git a/package.json b/package.json index a23f9f450..7c571acdd 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "scripts": { "build:hooks": "node scripts/build-hooks.js", "prepublishOnly": "npm run build:hooks", - "test": "node --test tests/*.test.cjs", - "test:coverage": "c8 --check-coverage --lines 70 --reporter text --include 'get-shit-done/bin/lib/*.cjs' --exclude 'tests/**' --all node --test tests/*.test.cjs" + "test": "node scripts/run-tests.cjs", + "test:coverage": "c8 --check-coverage --lines 70 --reporter text --include 'get-shit-done/bin/lib/*.cjs' --exclude 'tests/**' --all node scripts/run-tests.cjs" } } diff --git a/scripts/run-tests.cjs b/scripts/run-tests.cjs new file mode 100644 index 000000000..a771e2a30 --- /dev/null +++ b/scripts/run-tests.cjs @@ -0,0 +1,25 @@ +#!/usr/bin/env node +// Cross-platform test runner — resolves test file globs via Node +// instead of relying on shell expansion (which fails on Windows PowerShell/cmd). +'use strict'; + +const { readdirSync } = require('fs'); +const { join } = require('path'); +const { execFileSync } = require('child_process'); + +const testDir = join(__dirname, '..', 'tests'); +const files = readdirSync(testDir) + .filter(f => f.endsWith('.test.cjs')) + .sort() + .map(f => join('tests', f)); + +if (files.length === 0) { + console.error('No test files found in tests/'); + process.exit(1); +} + +try { + execFileSync(process.execPath, ['--test', ...files], { stdio: 'inherit' }); +} catch (err) { + process.exit(err.status || 1); +}