Skip to content

Commit 1f2163e

Browse files
committed
fix: boolean flags work with simplified flag logic, but no other flags work properly using welcome.tsx
1 parent d36a2ad commit 1f2163e

File tree

2 files changed

+54
-58
lines changed

2 files changed

+54
-58
lines changed

packages/tooling/jest/src/react-native/index.test.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { renderHook } from '@testing-library/react-hooks';
2-
31
import {
42
ldClientMock,
53
mockFlags,
@@ -11,9 +9,7 @@ import {
119

1210
describe('react-native', () => {
1311
test('reset LD Mocks', () => {
14-
const {
15-
result: { current },
16-
} = renderHook(() => mockUseLDClient());
12+
const current = mockUseLDClient();
1713

1814
current?.track('event');
1915
expect(ldClientMock.track).toHaveBeenCalledTimes(1);
@@ -24,18 +20,22 @@ describe('react-native', () => {
2420

2521
test('mock boolean flag correctly', () => {
2622
mockFlags({ 'bool-flag': true });
23+
expect(ldClientMock.boolVariation).toBeDefined();
2724
});
2825

2926
test('mock number flag correctly', () => {
3027
mockFlags({ 'number-flag': 42 });
28+
expect(ldClientMock.numberVariation).toBeDefined();
3129
});
3230

3331
test('mock string flag correctly', () => {
3432
mockFlags({ 'string-flag': 'hello' });
33+
expect(ldClientMock.stringVariation).toBeDefined();
3534
});
3635

3736
test('mock json flag correctly', () => {
3837
mockFlags({ 'json-flag': { key: 'value' } });
38+
expect(ldClientMock.jsonVariation).toBeDefined();
3939
});
4040

4141
test('mock LDProvider correctly', () => {
@@ -48,9 +48,7 @@ describe('react-native', () => {
4848

4949
test('mock ldClient correctly', () => {
5050
resetLDMocks();
51-
const {
52-
result: { current },
53-
} = renderHook(() => mockUseLDClient());
51+
const current = mockUseLDClient();
5452

5553
current?.track('event');
5654
expect(ldClientMock.track).toHaveBeenCalledTimes(1);

packages/tooling/jest/src/react-native/index.ts

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,23 @@ import {
66
} from '@launchdarkly/react-native-client-sdk';
77

88
jest.mock('@launchdarkly/react-native-client-sdk', () => ({
9-
LDProvider: jest.fn(),
10-
ReactNativeLDClient: jest.fn(),
11-
useLDClient: jest.fn(),
9+
LDFlagSet: jest.fn(() => ({})),
10+
LDProvider: jest.fn().mockImplementation(({ children }) => children),
11+
ReactNativeLDClient: jest.fn().mockImplementation(),
12+
useLDClient: jest.fn().mockImplementation(),
13+
useBoolVariation: jest.fn(),
14+
useBoolVariationDetail: jest.fn(),
15+
useNumberVariation: jest.fn(),
16+
useNumberVariationDetail: jest.fn(),
17+
useStringVariation: jest.fn(),
18+
useStringVariationDetail: jest.fn(),
19+
useJsonVariation: jest.fn(),
20+
useJsonVariationDetail: jest.fn(),
21+
useTypedVariation: jest.fn(),
22+
useTypedVariationDetail: jest.fn(),
1223
}));
1324

14-
const mockLDProvider = LDProvider as jest.Mock;
15-
const mockReactNativeLDClient = ReactNativeLDClient as jest.Mock;
16-
const mockUseLDClient = useLDClient as jest.Mock;
17-
18-
export const ldClientMock = {
25+
export const ldClientMock: any = {
1926
allFlags: jest.fn(),
2027
boolVariation: jest.fn(),
2128
boolVariationDetail: jest.fn(),
@@ -39,53 +46,44 @@ export const ldClientMock = {
3946
variationDetail: jest.fn(),
4047
};
4148

42-
mockLDProvider.mockImplementation((props: any) => props.children);
43-
mockUseLDClient.mockImplementation(() => ldClientMock);
44-
mockReactNativeLDClient.mockImplementation(() => ldClientMock);
49+
export const mockLDProvider = LDProvider as jest.Mock;
50+
export const mockReactNativeLDClient = ReactNativeLDClient as jest.Mock;
51+
export const mockUseLDClient = useLDClient as jest.Mock;
4552

46-
export { mockLDProvider, mockReactNativeLDClient, mockUseLDClient };
53+
mockLDProvider.mockImplementation(({ children }) => children);
54+
mockReactNativeLDClient.mockImplementation(() => ldClientMock);
55+
mockUseLDClient.mockImplementation(() => ldClientMock);
4756

48-
export const mockFlags = (flags: LDFlagSet) => {
49-
ldClientMock.boolVariation.mockImplementation((flagKey: string) => {
50-
if (typeof flags[flagKey] !== 'boolean') {
51-
throw new Error(`Flag ${flagKey} is not a boolean. Flag value, ${flags[flagKey]}`);
52-
}
53-
return flags[flagKey] as boolean;
54-
});
55-
ldClientMock.numberVariation.mockImplementation((flagKey: string) => {
56-
if (typeof flags[flagKey] !== 'number') {
57-
throw new Error(`Flag ${flagKey} is not a number. Flag value, ${flags[flagKey]}`);
58-
}
59-
return flags[flagKey] as number;
60-
});
61-
ldClientMock.stringVariation.mockImplementation((flagKey: string) => {
62-
if (typeof flags[flagKey] !== 'string') {
63-
throw new Error(`Flag ${flagKey} is not a string. Flag value, ${flags[flagKey]}`);
64-
}
65-
return flags[flagKey] as string;
66-
});
67-
ldClientMock.jsonVariation.mockImplementation((flagKey: string) => {
68-
if (typeof flags[flagKey] !== 'object') {
69-
throw new Error(`Flag ${flagKey} is not a JSON. Flag value, ${flags[flagKey]}`);
57+
export const mockFlags = (flags: LDFlagSet): any => {
58+
Object.keys(flags).forEach((key) => {
59+
const defaultValue = flags[key];
60+
switch (typeof defaultValue) {
61+
case 'boolean':
62+
ldClientMock.boolVariation.mockImplementation(
63+
(flagKey: string) => flags[flagKey] as boolean,
64+
);
65+
break;
66+
case 'number':
67+
ldClientMock.numberVariation.mockImplementation(
68+
(flagKey: string) => flags[flagKey] as number,
69+
);
70+
break;
71+
case 'string':
72+
ldClientMock.stringVariation.mockImplementation(
73+
(flagKey: string) => flags[flagKey] as string,
74+
);
75+
break;
76+
case 'object':
77+
ldClientMock.jsonVariation.mockImplementation(
78+
(flagKey: string) => flags[flagKey] as object,
79+
);
80+
break;
81+
default:
82+
break;
7083
}
71-
return flags[flagKey] as object;
7284
});
7385
};
7486

7587
export const resetLDMocks = () => {
76-
ldClientMock.allFlags.mockReset();
77-
ldClientMock.boolVariation.mockReset();
78-
ldClientMock.close.mockReset();
79-
ldClientMock.flush.mockReset();
80-
ldClientMock.getContext.mockReset();
81-
ldClientMock.identify.mockReset();
82-
ldClientMock.jsonVariation.mockReset();
83-
ldClientMock.logger.mockReset();
84-
ldClientMock.numberVariation.mockReset();
85-
ldClientMock.off.mockReset();
86-
ldClientMock.on.mockReset();
87-
ldClientMock.setConnectionMode.mockReset();
88-
ldClientMock.stringVariation.mockReset();
89-
ldClientMock.track.mockReset();
90-
ldClientMock.variation.mockReset();
88+
jest.clearAllMocks();
9189
};

0 commit comments

Comments
 (0)