-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathgetFrontendFlags.test.ts
65 lines (55 loc) · 1.86 KB
/
getFrontendFlags.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { getFrontendFlags } from "./getFrontendFlags";
const mockClient = {
start: vi.fn(),
stop: vi.fn(),
on: vi.fn(),
getAllToggles: vi.fn(),
};
describe("getFrontendFlags", () => {
beforeEach(() => {
vi.mock("unleash-proxy-client", () => ({
UnleashClient: vi.fn().mockImplementation(() => mockClient),
}));
});
afterEach(() => {
Object.keys(mockClient).forEach((key) => {
mockClient[key as keyof typeof mockClient].mockReset();
});
});
it("should return a list of toggles", async () => {
mockClient.getAllToggles.mockReturnValue([]);
mockClient.on.mockImplementation((event, callback) => {
if (event === "ready") {
callback();
}
});
await expect(getFrontendFlags()).resolves.toEqual({ toggles: [] });
expect(mockClient.start).toHaveBeenCalledOnce();
expect(mockClient.getAllToggles).toHaveBeenCalledOnce();
expect(mockClient.on).toHaveBeenCalledWith("ready", expect.any(Function));
expect(mockClient.stop).toHaveBeenCalledOnce();
});
it("should add error handler", async () => {
mockClient.getAllToggles.mockReturnValue([]);
mockClient.on.mockImplementation((event, callback) => {
if (event === "error") {
callback(new Error());
}
});
await expect(getFrontendFlags()).rejects.toThrow();
expect(mockClient.start).toHaveBeenCalledOnce();
expect(mockClient.on).toHaveBeenCalledWith("ready", expect.any(Function));
expect(mockClient.stop).toHaveBeenCalledOnce();
});
it("should not hang on error", async () => {
let errorCallback = vi.fn();
mockClient.on.mockImplementation((event, callback) => {
if (event === "error") {
errorCallback = callback;
}
});
const pendingPromise = getFrontendFlags();
errorCallback(new Error("error!"));
await expect(pendingPromise).rejects.toThrow("error!");
});
});