Skip to content

Commit 055c5c3

Browse files
committed
Fix bug where node env reset also deletes coverage data
1 parent 42a13d6 commit 055c5c3

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

src/test/helpers.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import type { Readable } from 'stream';
1212
*/
1313
import type * as tsNodeTypes from '../index';
1414
import type _createRequire from 'create-require';
15-
import { has, once } from 'lodash';
15+
import { has, mapValues, once } from 'lodash';
1616
import semver = require('semver');
1717
const createRequire: typeof _createRequire = require('create-require');
1818
export { tsNodeTypes };
@@ -218,25 +218,29 @@ export function resetNodeEnvironment() {
218218
resetObject(require('module'), defaultModule);
219219

220220
// May be modified by REPL tests, since the REPL sets globals.
221-
resetObject(global, defaultGlobal);
221+
// Avoid deleting nyc's coverage data.
222+
resetObject(global, defaultGlobal, ['__coverage__']);
222223
}
223224

224225
function captureObjectState(object: any) {
226+
const descriptors = Object.getOwnPropertyDescriptors(object);
227+
const values = mapValues(descriptors, (_d, key) => object[key]);
225228
return {
226-
descriptors: Object.getOwnPropertyDescriptors(object),
227-
values: { ...object },
229+
descriptors,
230+
values,
228231
};
229232
}
230233
// Redefine all property descriptors and delete any new properties
231234
function resetObject(
232235
object: any,
233-
state: ReturnType<typeof captureObjectState>
236+
state: ReturnType<typeof captureObjectState>,
237+
doNotDeleteTheseKeys: string[] = []
234238
) {
235239
const currentDescriptors = Object.getOwnPropertyDescriptors(object);
236240
for (const key of Object.keys(currentDescriptors)) {
237-
if (!has(state.descriptors, key)) {
238-
delete object[key];
239-
}
241+
if (doNotDeleteTheseKeys.includes(key)) continue;
242+
if (has(state.descriptors, key)) continue;
243+
delete object[key];
240244
}
241245
// Trigger nyc's setter functions
242246
for (const [key, value] of Object.entries(state.values)) {

src/test/repl/node-repl-tla.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export async function upstreamTopLevelAwaitTests({
6464
return promise;
6565
}
6666

67-
runAndWait([
67+
await runAndWait([
6868
'function foo(x) { return x; }',
6969
'function koo() { return Promise.resolve(4); }',
7070
]);

0 commit comments

Comments
 (0)