diff --git a/src/cli/Arguments.zig b/src/cli/Arguments.zig index e6e6659a9fbd..e79d8cdba396 100644 --- a/src/cli/Arguments.zig +++ b/src/cli/Arguments.zig @@ -405,6 +405,8 @@ pub fn parse(allocator: std.mem.Allocator, ctx: Command.Context, comptime cmd: C } if (args.options("--coverage-reporter").len > 0) { + // Enable coverage when --coverage-reporter is specified + ctx.test_options.coverage.enabled = true; ctx.test_options.coverage.reporters = .{ .text = false, .lcov = false }; for (args.options("--coverage-reporter")) |reporter| { if (bun.strings.eqlComptime(reporter, "text")) { diff --git a/test/cli/test/coverage.test.ts b/test/cli/test/coverage.test.ts index 40f8db3dc7b3..35958bf42473 100644 --- a/test/cli/test/coverage.test.ts +++ b/test/cli/test/coverage.test.ts @@ -77,3 +77,46 @@ test("coverage excludes node_modules directory", () => { expect(result.exitCode).toBe(0); expect(result.signalCode).toBeUndefined(); }); + +test("--coverage-reporter enables coverage", () => { + const dir = tempDirWithFiles("cov", { + "demo.test.ts": ` +import { test, expect } from "bun:test"; + +export function add(a, b) { + return a + b; +} + +export function multiply(a, b) { + return a * b; +} + +test("add", () => { + expect(add(1, 2)).toBe(3); +}); + +// Call add but not multiply to have partial coverage +add(5, 10); + `, + }); + + // Use --coverage-reporter without --coverage + const result = Bun.spawnSync([bunExe(), "test", "--coverage-reporter", "text"], { + cwd: dir, + env: { + ...bunEnv, + }, + stdio: [null, null, "pipe"], + }); + + const stderr = result.stderr.toString("utf-8"); + + // Check that coverage reporting actually happened + expect(stderr).toContain("File"); + expect(stderr).toContain("% Funcs"); + expect(stderr).toContain("% Lines"); + expect(stderr).toContain("demo.test.ts"); + + expect(result.exitCode).toBe(0); + expect(result.signalCode).toBeUndefined(); +});