diff --git a/lib/internal/test_runner/runner.js b/lib/internal/test_runner/runner.js index 3f9e855f755212..5ab1bf2229bd02 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, { __proto__: null }, 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..a0f5de6dde1d69 --- /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 + } +}); \ No newline at end of file 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..51e5d738d4eef0 --- /dev/null +++ b/test/parallel/test-runner-enqueue-file-syntax-error.js @@ -0,0 +1,22 @@ +// Flags: --no-warnings +'use strict'; +const common = require('../common'); +const assert = require('node:assert'); +const { run } = require('node:test'); +const fixtures = require('../common/fixtures'); + +const testFile = fixtures.path('test-runner', 'syntax-error-test.mjs'); +const stream = run({ + files: [testFile], + isolation: 'none', +}); + +stream.on('test:enqueue', common.mustCall((data) => { + assert.ok(data.file, 'test:enqueue event should have file field'); + assert.strictEqual(data.file, testFile); +})); + +stream.on('test:fail', common.mustCall((data) => { + assert.ok(data.details.error); + assert.match(data.details.error.message, /SyntaxError/); +}));