diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js index 3f9e855f755212..53e426561148cd 100644 --- a/lib/internal/test_runner/runner.js +++ b/lib/internal/test_runner/runner.js @@ -851,7 +851,10 @@ function run(options = kEmptyObject) { ); if (topLevelTestCount === root.subtests.length) { // This file had no tests in it. Add the placeholder test. - const subtest = root.createSubtest(Test, testFile); + const subtest = root.createSubtest(Test, testFile, kEmptyObject, undefined, { + __proto__: null, + loc: [1, 1, resolve(testFile)], + }); if (threw) { subtest.fail(importError); } diff --git a/test/fixtures/test-runner/syntax-error-test.mjs b/test/fixtures/test-runner/syntax-error-test.mjs new file mode 100644 index 00000000000000..536821087677cf --- /dev/null +++ b/test/fixtures/test-runner/syntax-error-test.mjs @@ -0,0 +1,7 @@ +import { test } from 'node:test'; + +test('a test!', () => { + if true { + // syntax error + } +}); diff --git a/test/parallel/test-runner-enqueue-file-syntax-error.js b/test/parallel/test-runner-enqueue-file-syntax-error.js new file mode 100644 index 00000000000000..dc520feade320e --- /dev/null +++ b/test/parallel/test-runner-enqueue-file-syntax-error.js @@ -0,0 +1,19 @@ +'use strict'; +const common = require('../common'); +const assert = require('node:assert'); +const fixtures = require('../common/fixtures'); +const { run } = require('node:test'); + +const testFile = fixtures.path('test-runner', 'syntax-error-test.mjs'); +const testRun = run({ + files: [testFile], + isolation: 'none' +}); + +testRun.on('test:enqueue', common.mustCall((test) => { + assert.strictEqual(test.file, testFile); +})); + +testRun.on('test:fail', common.mustCall((test) => { + assert.match(test.details.error.toString(), /SyntaxError: Unexpected token 'true'/); +}));