Skip to content

Commit 0677496

Browse files
committed
test_runner: enable in-source testing
Fixes: nodejs#45771
1 parent ecd385e commit 0677496

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

lib/internal/modules/esm/initialize_import_meta.js

+34
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,31 @@
33
const { getOptionValue } = require('internal/options');
44
const experimentalImportMetaResolve =
55
getOptionValue('--experimental-import-meta-resolve');
6+
const isTestRunner = getOptionValue('--test');
67
const {
78
PromisePrototypeThen,
89
PromiseReject,
10+
ObjectAssign,
911
} = primordials;
1012
const asyncESM = require('internal/process/esm_loader');
1113

14+
let testModule;
15+
let runnerModule;
16+
17+
function lazyLoadTestModule() {
18+
if (testModule === undefined) {
19+
testModule = require('internal/test_runner/harness');
20+
}
21+
return testModule;
22+
}
23+
24+
function lazyLoadRunnerModule() {
25+
if (runnerModule === undefined) {
26+
runnerModule = require('internal/test_runner/runner');
27+
}
28+
return runnerModule;
29+
}
30+
1231
function createImportMetaResolve(defaultParentUrl) {
1332
return async function resolve(specifier, parentUrl = defaultParentUrl) {
1433
return PromisePrototypeThen(
@@ -34,6 +53,21 @@ function initializeImportMeta(meta, context) {
3453
}
3554

3655
meta.url = url;
56+
if (isTestRunner) {
57+
const { test, describe, it, before, after, beforeEach, afterEach } = lazyLoadTestModule();
58+
const { run } = lazyLoadRunnerModule();
59+
meta.test = test;
60+
ObjectAssign(meta, {
61+
after,
62+
afterEach,
63+
before,
64+
beforeEach,
65+
describe,
66+
it,
67+
run,
68+
test,
69+
});
70+
}
3771
}
3872

3973
module.exports = {

0 commit comments

Comments
 (0)