Skip to content

SuiteContext missing fullName property that exists at runtime #60757

@Ethan-Arrowood

Description

@Ethan-Arrowood

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    docIssues and PRs related to the documentations.good first issueIssues that are suitable for first-time contributors.test_runnerIssues and PRs related to the test runner subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions