mirror of https://github.com/nodejs/node.git
test_runner: run top level tests in a microtask
This commit updates the test harness to prevent top level tests from executing immediately. This allows certain config data, such as filtering options, to be discovered before running the tests. PR-URL: https://github.com/nodejs/node/pull/52092 Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
This commit is contained in:
parent
97b2c5344d
commit
05db979c01
|
@ -25,6 +25,7 @@ const {
|
|||
setupTestReporters,
|
||||
shouldColorizeTestFiles,
|
||||
} = require('internal/test_runner/utils');
|
||||
const { queueMicrotask } = require('internal/process/task_queues');
|
||||
const { bigint: hrtime } = process.hrtime;
|
||||
|
||||
const testResources = new SafeMap();
|
||||
|
@ -181,6 +182,7 @@ function setup(root) {
|
|||
|
||||
root.harness = {
|
||||
__proto__: null,
|
||||
allowTestsToRun: false,
|
||||
bootstrapComplete: false,
|
||||
coverage: FunctionPrototypeBind(collectCoverage, null, root, coverage),
|
||||
counters: {
|
||||
|
@ -219,7 +221,16 @@ function getGlobalRoot() {
|
|||
|
||||
async function startSubtest(subtest) {
|
||||
await reportersSetup;
|
||||
getGlobalRoot().harness.bootstrapComplete = true;
|
||||
|
||||
const root = getGlobalRoot();
|
||||
if (!root.harness.bootstrapComplete) {
|
||||
root.harness.bootstrapComplete = true;
|
||||
queueMicrotask(() => {
|
||||
root.harness.allowTestsToRun = true;
|
||||
root.processPendingSubtests();
|
||||
});
|
||||
}
|
||||
|
||||
await subtest.start();
|
||||
}
|
||||
|
||||
|
|
|
@ -538,6 +538,7 @@ function run(options = kEmptyObject) {
|
|||
}
|
||||
const runFiles = () => {
|
||||
root.harness.bootstrapComplete = true;
|
||||
root.harness.allowTestsToRun = true;
|
||||
return SafePromiseAllSettledReturnVoid(testFiles, (path) => {
|
||||
const subtest = runTestFile(path, filesWatcher, opts);
|
||||
filesWatcher?.runningSubtests.set(path, subtest);
|
||||
|
|
|
@ -599,7 +599,7 @@ class Test extends AsyncResource {
|
|||
// it. Otherwise, return a Promise to the caller and mark the test as
|
||||
// pending for later execution.
|
||||
this.reporter.enqueue(this.nesting, this.loc, this.name);
|
||||
if (!this.parent.hasConcurrency()) {
|
||||
if (!this.root.harness.allowTestsToRun || !this.parent.hasConcurrency()) {
|
||||
const deferred = createDeferredPromise();
|
||||
|
||||
deferred.test = this;
|
||||
|
|
|
@ -21,6 +21,9 @@ not ok 1 - fails
|
|||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
|
|
Loading…
Reference in New Issue