Affected URL(s)
https://nodejs.org/docs/latest-v24.x/api/test.html#class-suitecontext
Description of the problem
It seems that fullName exists at runtime for SuiteContext but it is missing from the docs.
I tested this with a plethora of examples:
import { suite, test, before, after } from 'node:test';
import { setTimeout as sleep } from 'node:timers/promises';
before((ctx) => {
console.log(`outer before name: ${ctx.name}`)
console.log(`outer before file name: ${ctx.filePath}`)
console.log(`outer before full name: ${ctx.fullName}`)
});
after((ctx) => {
console.log(`outer after name: ${ctx.name}`)
console.log(`outer after file name: ${ctx.filePath}`)
console.log(`outer after full name: ${ctx.fullName}`)
});
test('top level test', async (ctx) => {
console.log(`tlt name: ${ctx.name}`)
console.log(`tlt file name: ${ctx.filePath}`)
console.log(`tlt full name: ${ctx.fullName}`)
before((ctx) => {
console.log(`tlt before name: ${ctx.name}`)
console.log(`tlt before file name: ${ctx.filePath}`)
console.log(`tlt before full name: ${ctx.fullName}`)
})
after((ctx) => {
console.log(`tlt after name: ${ctx.name}`)
console.log(`tlt after file name: ${ctx.filePath}`)
console.log(`tlt after full name: ${ctx.fullName}`)
})
await sleep(1000);
console.log('tlt text');
});
suite('Suite 1', { concurrency: true }, (ctx) => {
console.log(`suite name: ${ctx.name}`)
console.log(`suite file name: ${ctx.filePath}`)
console.log(`suite full name: ${ctx.fullName}`)
before((ctx) => {
console.log(`suite before name: ${ctx.name}`)
console.log(`suite before file name: ${ctx.filePath}`)
console.log(`suite before full name: ${ctx.fullName}`)
})
after((ctx) => {
console.log(`suite after name: ${ctx.name}`)
console.log(`suite after file name: ${ctx.filePath}`)
console.log(`suite after full name: ${ctx.fullName}`)
})
suite('Nested Suite 1', (ctx) => {
console.log(`nested suite name: ${ctx.name}`)
console.log(`nested suite file name: ${ctx.filePath}`)
console.log(`nested suite full name: ${ctx.fullName}`)
before((ctx) => {
console.log(`nested suite before name: ${ctx.name}`)
console.log(`nested suite before file name: ${ctx.filePath}`)
console.log(`nested suite before full name: ${ctx.fullName}`)
})
after((ctx) => {
console.log(`nested suite after name: ${ctx.name}`)
console.log(`nested suite after file name: ${ctx.filePath}`)
console.log(`nested suite after full name: ${ctx.fullName}`)
})
test('nested suite test 1', async (ctx) => {
console.log(`nested suite test name: ${ctx.name}`)
console.log(`nested suite test file name: ${ctx.filePath}`)
console.log(`nested suite test full name: ${ctx.fullName}`)
await sleep(1000);
});
});
test('suite 1 test 1', async (ctx) => {
console.log(`suite test name: ${ctx.name}`)
console.log(`suite test file name: ${ctx.filePath}`)
console.log(`suite test full name: ${ctx.fullName}`)
await sleep(1000);
});
});
suite('Suite 2', (ctx) => {
console.log(`suite 2 name: ${ctx.name}`)
console.log(`suite 2 file name: ${ctx.filePath}`)
console.log(`suite 2 full name: ${ctx.fullName}`)
before((ctx) => {
console.log(`suite 2 before name: ${ctx.name}`)
console.log(`suite 2 before file name: ${ctx.filePath}`)
console.log(`suite 2 before full name: ${ctx.fullName}`)
})
after((ctx) => {
console.log(`suite 2 after name: ${ctx.name}`)
console.log(`suite 2 after file name: ${ctx.filePath}`)
console.log(`suite 2 after full name: ${ctx.fullName}`)
})
test('suite 2 test 1', async (ctx) => {
console.log(`suite 2 test name: ${ctx.name}`)
console.log(`suite 2 test file name: ${ctx.filePath}`)
console.log(`suite 2 test full name: ${ctx.fullName}`)
await sleep(1000);
});
});
And the output:
❯ node --test test.test.mts
outer before name: <root>
outer before file name: /Users/ethan/dev/test.test.mts
outer before full name: <root>
suite name: Suite 1
suite file name: /Users/ethan/dev/test.test.mts
suite full name: Suite 1
nested suite name: Nested Suite 1
nested suite file name: /Users/ethan/dev/]test.test.mts
nested suite full name: Suite 1 > Nested Suite 1
suite 2 name: Suite 2
suite 2 file name: /Users/ethan/dev/]test.test.mts
suite 2 full name: Suite 2
tlt name: top level test
tlt file name: /Users/ethan/dev/harperdb/test.test.mts
tlt full name: top level test
tlt before name: top level test
tlt before file name: /Users/ethan/dev/test.test.mts
tlt before full name: top level test
tlt text
tlt after name: top level test
tlt after file name: /Users/ethan/dev/test.test.mts
tlt after full name: top level test
suite before name: Suite 1
suite before file name: /Users/ethan/dev/test.test.mts
suite before full name: Suite 1
suite test name: suite 1 test 1
suite test file name: /Users/ethan/dev/test.test.mts
suite test full name: Suite 1 > suite 1 test 1
nested suite before name: Nested Suite 1
nested suite before file name: /Users/ethan/dev/test.test.mts
nested suite before full name: Suite 1 > Nested Suite 1
nested suite test name: nested suite test 1
nested suite test file name: /Users/ethan/dev/test.test.mts
nested suite test full name: Suite 1 > Nested Suite 1 > nested suite test 1
✔ top level test (1001.064666ms)
nested suite after name: Nested Suite 1
nested suite after file name: /Users/ethan/dev/test.test.mts
nested suite after full name: Suite 1 > Nested Suite 1
suite after name: Suite 1
suite after file name: /Users/ethan/dev/test.test.mts
suite after full name: Suite 1
suite 2 before name: Suite 2
suite 2 before file name: /Users/ethan/dev/test.test.mts
suite 2 before full name: Suite 2
suite 2 test name: suite 2 test 1
suite 2 test file name: /Users/ethan/dev/test.test.mts
suite 2 test full name: Suite 2 > suite 2 test 1
▶ Suite 1
▶ Nested Suite 1
✔ nested suite test 1 (1000.447083ms)
✔ Nested Suite 1 (1001.29175ms)
✔ suite 1 test 1 (1000.691916ms)
✔ Suite 1 (1001.694125ms)
suite 2 after name: Suite 2
suite 2 after file name: /Users/ethan/dev/test.test.mts
suite 2 after full name: Suite 2
outer after name: <root>
outer after file name: /Users/ethan/dev/test.test.mts
outer after full name: <root>
▶ Suite 2
✔ suite 2 test 1 (1000.771042ms)
✔ Suite 2 (1004.945292ms)
ℹ tests 4
ℹ suites 3
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3102.461209
Furthermore, its missing from the types if someone wants to open an appropriate issue on DefinitelyTyped
Affected URL(s)
https://nodejs.org/docs/latest-v24.x/api/test.html#class-suitecontext
Description of the problem
It seems that
fullNameexists at runtime forSuiteContextbut it is missing from the docs.I tested this with a plethora of examples:
And the output:
Furthermore, its missing from the types if someone wants to open an appropriate issue on DefinitelyTyped