Skip to content

Commit d21a00d

Browse files
authored
fix: tests, enforce unhandled mocked requests (#1713)
1 parent ab570f7 commit d21a00d

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

ui/admin/test/mocks/handlers/tools.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
mockedWorkspaceFilesToolReference,
1010
} from "test/mocks/models/toolReferences";
1111

12+
import { OAuthApp } from "~/lib/model/oauthApps";
1213
import { EntityList } from "~/lib/model/primitives";
1314
import { ToolReference } from "~/lib/model/toolReferences";
1415
import { ApiRoutes } from "~/lib/routers/apiRoutes";
@@ -33,4 +34,9 @@ export const toolsHandlers = [
3334
items: mockedToolReferences,
3435
});
3536
}),
37+
http.get(ApiRoutes.oauthApps.getOauthApps().path, () => {
38+
return HttpResponse.json<EntityList<OAuthApp>>({
39+
items: [],
40+
});
41+
}),
3642
];

ui/admin/test/setup.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ import "@testing-library/jest-dom";
22
import { mutate } from "swr";
33
import { server } from "test/server";
44

5+
declare module "vitest" {
6+
interface Assertion {
7+
notToHaveUnhandledCalls(): void;
8+
}
9+
}
10+
511
// for ThemeProvider, mock window.matchMedia
612
Object.defineProperty(window, "matchMedia", {
713
writable: true,
@@ -24,17 +30,46 @@ global.ResizeObserver = class ResizeObserver {
2430
disconnect() {}
2531
};
2632

33+
expect.extend({
34+
notToHaveUnhandledCalls(received) {
35+
const pass = received.mock.calls.length === 0;
36+
37+
if (!pass) {
38+
const unhandledRequests = received.mock.calls
39+
.map(([req]: [Request]) => `${req.method} ${req.url}`)
40+
.join("\n ");
41+
42+
return {
43+
pass,
44+
message: () =>
45+
`[MSW] Error: intercepted a request without a matching request handler:\n\n ${unhandledRequests}\n\n Make sure to add appropriate request handlers for these calls. \n Read more: https://mswjs.io/docs/getting-started/mocks`,
46+
};
47+
}
48+
return { pass, message: () => "No unhandled calls detected" };
49+
},
50+
});
51+
52+
const onUnhandledRequest = vi.fn();
53+
2754
// Establish API mocking before all tests
28-
beforeAll(() => server.listen());
55+
beforeAll(() =>
56+
server.listen({
57+
onUnhandledRequest: onUnhandledRequest,
58+
})
59+
);
2960

3061
beforeEach(() => {
3162
// Clear the SWR cache before each test
3263
mutate(() => true, undefined, { revalidate: true });
64+
onUnhandledRequest.mockClear();
3365
});
3466

3567
// Reset any request handlers that we may add during the tests,
3668
// so they don't affect other tests.
37-
afterEach(() => server.resetHandlers());
69+
afterEach(() => {
70+
server.resetHandlers();
71+
expect(onUnhandledRequest).notToHaveUnhandledCalls();
72+
});
3873

3974
// Clean up after the tests are finished.
4075
afterAll(() => server.close());

0 commit comments

Comments
 (0)