Skip to content

Commit

Permalink
test_runner: allow --import with no isolation
Browse files Browse the repository at this point in the history
Co-Authored-By: Colin Ihrig <cjihrig@gmail.com>
PR-URL: #54697
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
  • Loading branch information
2 people authored and RafaelGSS committed Sep 16, 2024
1 parent e38e305 commit c69ae89
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 14 deletions.
6 changes: 6 additions & 0 deletions lib/internal/test_runner/runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ const { spawn } = require('child_process');
const { finished } = require('internal/streams/end-of-stream');
const { resolve } = require('path');
const { DefaultDeserializer, DefaultSerializer } = require('v8');
const { getOptionValue } = require('internal/options');
const { Interface } = require('internal/readline/interface');
const { deserializeError } = require('internal/error_serdes');
const { Buffer } = require('buffer');
Expand Down Expand Up @@ -697,6 +698,11 @@ function run(options = kEmptyObject) {

root.harness.bootstrapPromise = promise;

const userImports = getOptionValue('--import');
for (let i = 0; i < userImports.length; i++) {
await cascadedLoader.import(userImports[i], parentURL, kEmptyObject);
}

for (let i = 0; i < testFiles.length; ++i) {
const testFile = testFiles[i];
const fileURL = pathToFileURL(testFile);
Expand Down
6 changes: 6 additions & 0 deletions test/fixtures/test-runner/no-isolation/global-hooks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import('node:test').then((test) => {
test.before(() => console.log('before(): global'));
test.beforeEach(() => console.log('beforeEach(): global'));
test.after(() => console.log('after(): global'));
test.afterEach(() => console.log('afterEach(): global'));
});
19 changes: 12 additions & 7 deletions test/fixtures/test-runner/no-isolation/one.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,35 @@ const { before, beforeEach, after, afterEach, test, suite } = require('node:test

globalThis.GLOBAL_ORDER = [];

function record(data) {
globalThis.GLOBAL_ORDER.push(data);
console.log(data);
}

before(function() {
GLOBAL_ORDER.push(`before one: ${this.name}`);
record(`before one: ${this.name}`);
});

beforeEach(function() {
GLOBAL_ORDER.push(`beforeEach one: ${this.name}`);
record(`beforeEach one: ${this.name}`);
});

after(function() {
GLOBAL_ORDER.push(`after one: ${this.name}`);
record(`after one: ${this.name}`);
});

afterEach(function() {
GLOBAL_ORDER.push(`afterEach one: ${this.name}`);
record(`afterEach one: ${this.name}`);
});

suite('suite one', function() {
GLOBAL_ORDER.push(this.name);
record(this.name);

test('suite one - test', { only: true }, function() {
GLOBAL_ORDER.push(this.name);
record(this.name);
});
});

test('test one', function() {
GLOBAL_ORDER.push(this.name);
record(this.name);
});
19 changes: 12 additions & 7 deletions test/fixtures/test-runner/no-isolation/two.test.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,35 @@
'use strict';
const { before, beforeEach, after, afterEach, test, suite } = require('node:test');

function record(data) {
globalThis.GLOBAL_ORDER.push(data);
console.log(data);
}

before(function() {
GLOBAL_ORDER.push(`before two: ${this.name}`);
record(`before two: ${this.name}`);
});

beforeEach(function() {
GLOBAL_ORDER.push(`beforeEach two: ${this.name}`);
record(`beforeEach two: ${this.name}`);
});

after(function() {
GLOBAL_ORDER.push(`after two: ${this.name}`);
record(`after two: ${this.name}`);
});

afterEach(function() {
GLOBAL_ORDER.push(`afterEach two: ${this.name}`);
record(`afterEach two: ${this.name}`);
});

suite('suite two', function() {
GLOBAL_ORDER.push(this.name);
record(this.name);

before(function() {
GLOBAL_ORDER.push(`before suite two: ${this.name}`);
record(`before suite two: ${this.name}`);
});

test('suite two - test', { only: true }, function() {
GLOBAL_ORDER.push(this.name);
record(this.name);
});
});
75 changes: 75 additions & 0 deletions test/parallel/test-runner-no-isolation-hooks.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import * as common from '../common/index.mjs';
import * as fixtures from '../common/fixtures.mjs';
import { test } from 'node:test';

const testArguments = [
'--test',
'--experimental-test-isolation=none',
];

const testFiles = [
fixtures.path('test-runner', 'no-isolation', 'one.test.js'),
fixtures.path('test-runner', 'no-isolation', 'two.test.js'),
];

const order = [
'before(): global',

'before one: <root>',
'suite one',

'before two: <root>',
'suite two',

'beforeEach(): global',
'beforeEach one: suite one - test',
'beforeEach two: suite one - test',

'suite one - test',
'afterEach(): global',
'afterEach one: suite one - test',
'afterEach two: suite one - test',

'beforeEach(): global',
'beforeEach one: test one',
'beforeEach two: test one',
'test one',

'afterEach(): global',
'afterEach one: test one',
'afterEach two: test one',

'before suite two: suite two',
'beforeEach(): global',
'beforeEach one: suite two - test',
'beforeEach two: suite two - test',

'suite two - test',
'afterEach(): global',
'afterEach one: suite two - test',
'afterEach two: suite two - test',

'after(): global',
'after one: <root>',
'after two: <root>',
];

test('Using --require to define global hooks works', async (t) => {
const spawned = await common.spawnPromisified(process.execPath, [
...testArguments,
'--require', fixtures.path('test-runner', 'no-isolation', 'global-hooks.js'),
...testFiles,
]);

t.assert.ok(spawned.stdout.includes(order.join('\n')));
});

test('Using --import to define global hooks works', async (t) => {
const spawned = await common.spawnPromisified(process.execPath, [
...testArguments,
'--import', fixtures.fileURL('test-runner', 'no-isolation', 'global-hooks.js'),
...testFiles,
]);

t.assert.ok(spawned.stdout.includes(order.join('\n')));
});

0 comments on commit c69ae89

Please sign in to comment.