Event ordering in the test runner does not match documentation expectations.
The issue involves incorrect ordering of `test:stdout` and `test:dequeue` events in the Node.js test runner, contrary to the documented behavior. The fix likely requires adjusting the event emission logic in the test runner, but the exact implementation details are unclear due to potential async/sync interactions.
v22.2.0
Linux 6a770f0f664c 6.6.26-linuxkit #1 SMP Sat Apr 27 04:13:19 UTC 2024 aarch64 GNU/Linux
test_runner
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
It always does the same
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."
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.
No response
Claim this issue to let others know you're working on it. You'll earn 20 points when you complete it!