@@ -6,16 +6,23 @@ import {
66} from '@launchdarkly/react-native-client-sdk' ;
77
88jest . 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
7587export 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