Skip to content

Commit c958460

Browse files
test(cli): mock browser in trace logs --web test
The --web test didn't mock browser.js, so running the suite on macOS opened a real browser tab to a fake test-org trace URL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent f0bd0a5 commit c958460

1 file changed

Lines changed: 34 additions & 16 deletions

File tree

‎packages/cli/test/commands/trace/logs.test.ts‎

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,20 @@ vi.mock("../../../src/lib/api-client.js", async (importOriginal) => {
3535

3636
// biome-ignore lint/performance/noNamespaceImport: needed for spyOn mocking
3737
import * as apiClient from "../../../src/lib/api-client.js";
38+
39+
vi.mock("../../../src/lib/browser.js", async (importOriginal) => {
40+
const actual =
41+
await importOriginal<typeof import("../../../src/lib/browser.js")>();
42+
return Object.fromEntries(
43+
Object.entries(actual).map(([k, v]) => [
44+
k,
45+
typeof v === "function" ? vi.fn(v) : v,
46+
])
47+
);
48+
});
49+
50+
// biome-ignore lint/performance/noNamespaceImport: needed for spyOn mocking
51+
import * as browser from "../../../src/lib/browser.js";
3852
import { ContextError } from "../../../src/lib/errors.js";
3953

4054
vi.mock("../../../src/lib/polling.js", async (importOriginal) => {
@@ -141,9 +155,13 @@ describe("logsCommand.func", () => {
141155
let resolveOrgSpy: ReturnType<typeof spyOn>;
142156
let resolveOrgOnlyTargetSpy: ReturnType<typeof spyOn>;
143157
let withProgressSpy: ReturnType<typeof spyOn>;
158+
let openInBrowserSpy: ReturnType<typeof spyOn>;
144159

145160
beforeEach(() => {
146161
listTraceLogsSpy = vi.spyOn(apiClient, "listTraceLogs");
162+
openInBrowserSpy = vi
163+
.spyOn(browser, "openInBrowser")
164+
.mockResolvedValue(undefined);
147165
resolveOrgSpy = vi.spyOn(resolveTarget, "resolveOrg");
148166
resolveOrgOnlyTargetSpy = vi
149167
.spyOn(resolveTarget, "resolveOrgOnlyTarget")
@@ -163,6 +181,7 @@ describe("logsCommand.func", () => {
163181
resolveOrgSpy.mockRestore();
164182
resolveOrgOnlyTargetSpy.mockRestore();
165183
withProgressSpy.mockRestore();
184+
openInBrowserSpy.mockRestore();
166185
});
167186

168187
describe("JSON output mode", () => {
@@ -511,23 +530,22 @@ describe("logsCommand.func", () => {
511530

512531
const { context } = createMockContext();
513532
const func = await logsCommand.loader();
514-
// --web would call openInBrowser which needs a real browser; catch any error
515-
try {
516-
await func.call(
517-
context,
518-
{
519-
json: false,
520-
web: true,
521-
period: parsePeriod("14d"),
522-
limit: 100,
523-
sort: "newest",
524-
},
525-
TRACE_ID
526-
);
527-
} catch {
528-
// openInBrowser may throw in test environment — that's OK
529-
}
533+
await func.call(
534+
context,
535+
{
536+
json: false,
537+
web: true,
538+
period: parsePeriod("14d"),
539+
limit: 100,
540+
sort: "newest",
541+
},
542+
TRACE_ID
543+
);
530544

545+
expect(openInBrowserSpy).toHaveBeenCalledWith(
546+
expect.stringContaining(TRACE_ID),
547+
"trace"
548+
);
531549
expect(listTraceLogsSpy).not.toHaveBeenCalled();
532550
});
533551
});

0 commit comments

Comments
 (0)