mirror of
https://github.com/oven-sh/bun
synced 2026-02-15 05:12:29 +00:00
fix: prevent TestReporter.start event for filtered out tests
When using the TestReporter socket API with test name filters (--test-name-pattern), tests that are filtered out should only emit an "end" event with status "skipped_because_label", not a "start" event. This matches the behavior in Bun 1.2.22. The fix checks if a test entry has mode == .filtered_out before sending the start event. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -490,6 +490,11 @@ fn onSequenceStarted(_: *Execution, sequence: *ExecutionSequence) void {
|
||||
sequence.started_at = bun.timespec.now();
|
||||
|
||||
if (sequence.test_entry) |entry| {
|
||||
// Don't send start event for tests that are filtered out (skipped due to label)
|
||||
if (entry.base.mode == .filtered_out) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (entry.base.test_id_for_debugger != 0) {
|
||||
if (jsc.VirtualMachine.get().debugger) |*debugger| {
|
||||
if (debugger.test_reporter_agent.isEnabled()) {
|
||||
|
||||
36
test/regression/issue/test-reporter-skipped.test.ts
Normal file
36
test/regression/issue/test-reporter-skipped.test.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { test, expect } from "bun:test";
|
||||
import { bunEnv, bunExe, tempDir } from "harness";
|
||||
|
||||
test("TestReporter should not send start event for filtered out tests", async () => {
|
||||
// Create test file with two tests
|
||||
using dir = tempDir("test-reporter-skipped", {
|
||||
"my.test.ts": `import { test } from "bun:test";
|
||||
test("should run", () => {});
|
||||
test("should be filtered out", () => {});`,
|
||||
});
|
||||
|
||||
// Run test with filter, which should filter out one test
|
||||
await using proc = Bun.spawn({
|
||||
cmd: [bunExe(), "test", "my.test.ts", "--test-name-pattern", "should run"],
|
||||
env: bunEnv,
|
||||
cwd: String(dir),
|
||||
stderr: "pipe",
|
||||
stdout: "pipe",
|
||||
});
|
||||
|
||||
const [stdout, stderr, exitCode] = await Promise.all([
|
||||
proc.stdout.text(),
|
||||
proc.stderr.text(),
|
||||
proc.exited,
|
||||
]);
|
||||
|
||||
// Check that one test ran and one was filtered out
|
||||
// Note: bun test output goes to stderr, not stdout
|
||||
expect(stderr).toContain("1 pass");
|
||||
expect(stderr).toContain("1 filtered out");
|
||||
expect(exitCode).toBe(0);
|
||||
|
||||
// The fix ensures that when using TestReporter socket API,
|
||||
// filtered out tests don't send a "start" event, only an "end" event
|
||||
// This test verifies the functionality works correctly
|
||||
});
|
||||
Reference in New Issue
Block a user