test: add process-state isolation helper for reliability (#331)
This commit is contained in:
41
tests/helpers-process-isolation.test.cjs
Normal file
41
tests/helpers-process-isolation.test.cjs
Normal file
@@ -0,0 +1,41 @@
|
||||
const { test, describe } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const path = require('node:path');
|
||||
|
||||
const { withIsolatedProcessState } = require('./helpers.cjs');
|
||||
|
||||
describe('withIsolatedProcessState', () => {
|
||||
test('restores env, cwd, and exitCode after callback', () => {
|
||||
const originalCwd = process.cwd();
|
||||
const originalExitCode = process.exitCode;
|
||||
const originalMarker = process.env.GSD_TEST_ISOLATION_MARKER;
|
||||
|
||||
const tempCwd = path.dirname(originalCwd);
|
||||
|
||||
withIsolatedProcessState(() => {
|
||||
process.env.GSD_TEST_ISOLATION_MARKER = 'changed';
|
||||
process.exitCode = 73;
|
||||
process.chdir(tempCwd);
|
||||
});
|
||||
|
||||
assert.strictEqual(process.cwd(), originalCwd);
|
||||
assert.strictEqual(process.exitCode, originalExitCode);
|
||||
assert.strictEqual(process.env.GSD_TEST_ISOLATION_MARKER, originalMarker);
|
||||
});
|
||||
|
||||
test('restores state even when callback throws', () => {
|
||||
const originalCwd = process.cwd();
|
||||
const originalPath = process.env.PATH;
|
||||
|
||||
assert.throws(() => {
|
||||
withIsolatedProcessState(() => {
|
||||
process.env.PATH = '';
|
||||
process.chdir(path.dirname(originalCwd));
|
||||
throw new Error('boom');
|
||||
});
|
||||
}, /boom/);
|
||||
|
||||
assert.strictEqual(process.cwd(), originalCwd);
|
||||
assert.strictEqual(process.env.PATH, originalPath);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user