`node:test` custom reporters get `test:stdout` and `test:stderr` events before `test:dequeue`
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 122k
- Forks
- 37.3k
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 283
Description
Version
v22.2.0
Platform
Linux 6a770f0f664c 6.6.26-linuxkit #1 SMP Sat Apr 27 04:13:19 UTC 2024 aarch64 GNU/Linux
Subsystem
test_runner
What steps will reproduce the bug?
Create a folder with these files:
index.test.mjs:
import { it } from "node:test";
it("test", () => {
console.log("message from the test");
});
reporter.mjs:
import util from "node:util";
export default async (source) => {
for await (const event of source) {
if (event.type === "test:stdout") {
console.log(event.type, util.inspect(event.data.message));
}
if (event.type === "test:dequeue") {
console.log(event.type, event.data.name);
}
}
};
and run
node --test --test-reporter=./reporter.mjs
which will print
test:dequeue index.test.mjs
test:stdout 'message from the test\n'
test:dequeue test
How often does it reproduce? Is there a required condition?
It always does the same
What is the expected behavior? Why is that the expected behavior?
I expected test:dequeue test to be printed before test:stdout 'message from the test\n' as the documentation states "Emitted when a test is dequeued, right before it is executed."
What do you see instead?
The test:stdout event is emitted before the test:dequeue, which makes it impossible to understand which test was running when the message was written to stdout.
Additional information
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the reported command with index.test.mjs and reporter.mjs to reproduce the event order. Read the node:test test_runner reporter-event handling and add coverage for this case; done means test:dequeue is observable before test:stdout for output from that test, matching the documented semantics.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, node.js
- Domain
- testing-qa
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100