Skip to content

Commit c8836bb

Browse files
authored
Merge pull request #7 from Liamandrew/feat/support-jest-tests
feat: don't throw error in unit tests
2 parents c83878e + 44af9f7 commit c8836bb

File tree

6 files changed

+322
-31
lines changed

6 files changed

+322
-31
lines changed

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ PODS:
300300
- React-jsinspector (0.68.2)
301301
- React-logger (0.68.2):
302302
- glog
303-
- react-native-picky (0.2.0):
303+
- react-native-picky (0.3.0):
304304
- React-Core
305305
- React-perflogger (0.68.2)
306306
- React-RCTActionSheet (0.68.2):
@@ -554,7 +554,7 @@ SPEC CHECKSUMS:
554554
React-jsiexecutor: b7b553412f2ec768fe6c8f27cd6bafdb9d8719e6
555555
React-jsinspector: c5989c77cb89ae6a69561095a61cce56a44ae8e8
556556
React-logger: a0833912d93b36b791b7a521672d8ee89107aff1
557-
react-native-picky: dd01dba35058e3d850723778c2522b881f1345a0
557+
react-native-picky: 5177b338d8a2126052975e63b2d5fd9aeb87eec9
558558
React-perflogger: a18b4f0bd933b8b24ecf9f3c54f9bf65180f3fe6
559559
React-RCTActionSheet: 547fe42fdb4b6089598d79f8e1d855d7c23e2162
560560
React-RCTAnimation: bc9440a1c37b06ae9ebbb532d244f607805c6034

package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@
3434
"keywords": [
3535
"react-native",
3636
"ios",
37-
"android"
37+
"android",
38+
"picker",
39+
"wheel"
3840
],
3941
"repository": "https://github.com/Liamandrew/react-native-picky",
4042
"author": "Liam Andrew <[email protected]> (https://github.com/Liamandrew)",
@@ -50,9 +52,12 @@
5052
"@commitlint/config-conventional": "^11.0.0",
5153
"@react-native-community/eslint-config": "^2.0.0",
5254
"@release-it/conventional-changelog": "^2.0.0",
55+
"@testing-library/react-native": "^9.1.0",
5356
"@types/jest": "^26.0.0",
5457
"@types/react": "^17.0.39",
5558
"@types/react-native": "0.67.7",
59+
"@types/react-test-renderer": "^17.0.1",
60+
"babel-jest": "^28.1.1",
5661
"commitlint": "^11.0.0",
5762
"eslint": "^7.2.0",
5863
"eslint-config-prettier": "^7.0.0",
@@ -64,6 +69,7 @@
6469
"react": "17.0.2",
6570
"react-native": "0.68.2",
6671
"react-native-builder-bob": "^0.18.2",
72+
"react-test-renderer": "^17.0.2",
6773
"release-it": "^14.2.2",
6874
"typescript": "^4.4.4"
6975
},

src/NativePicker.tsx

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import {
2-
requireNativeComponent,
3-
UIManager,
4-
Platform,
5-
StyleProp,
6-
ViewStyle,
7-
} from 'react-native';
1+
import { requireNativeComponent, StyleProp, ViewStyle } from 'react-native';
82
import type {
93
NativeColorType,
104
NativeOnChange,
@@ -25,6 +19,7 @@ type NativeCommonProps = {
2519
type NativeIOSProps = {
2620
style?: StyleProp<ViewStyle>;
2721
selectedIndexes?: number[];
22+
testID?: string;
2823
};
2924

3025
type NativeAndroidProps = {
@@ -44,14 +39,4 @@ export type NativePickerProps = NativeCommonProps &
4439
(NativeIOSProps | NativeAndroidProps);
4540

4641
export const NativePicker =
47-
UIManager.getViewManagerConfig(ComponentName) != null
48-
? requireNativeComponent<NativePickerProps>(ComponentName)
49-
: () => {
50-
throw new Error(LINKING_ERROR);
51-
};
52-
53-
const LINKING_ERROR =
54-
`The package 'react-native-picky' doesn't seem to be linked. Make sure: \n\n` +
55-
Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
56-
'- You rebuilt the app after installing the package\n' +
57-
'- You are not using Expo managed workflow\n';
42+
requireNativeComponent<NativePickerProps>(ComponentName);

src/Picker.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ export interface PickerProps {
2929
itemSpace?: number;
3030
textColor?: string;
3131
textSize?: number;
32-
selectedIndex?: number;
3332
style?: StyleProp<ViewStyle>;
3433
onChange?: (item: PickerGroupChangeItem) => void;
34+
testID?: string;
3535
}
3636

3737
export const Picker = ({
@@ -47,6 +47,7 @@ export const Picker = ({
4747
onChange,
4848
style,
4949
children,
50+
testID,
5051
}: PickerProps) => {
5152
const { data, selectedIndexes } = useGroupedNativePicker({
5253
children,
@@ -76,6 +77,7 @@ export const Picker = ({
7677
loop={loop}
7778
onChange={handleOnChange}
7879
style={[styles.picker, style]}
80+
testID={testID}
7981
/>
8082
);
8183
}
@@ -103,6 +105,7 @@ export const Picker = ({
103105
textSize={textSize}
104106
selectedIndex={selectedIndexes[index]}
105107
style={styles.picker}
108+
testID={testID}
106109
/>
107110
</View>
108111
))}

src/__tests__/Picker.test.tsx

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import React from 'react';
2+
import { render } from '@testing-library/react-native';
3+
import { Picker } from '../Picker';
4+
import { PickerGroup } from '../PickerGroup';
5+
import { PickerItem } from '../PickerItem';
6+
7+
describe('<Picker>', () => {
8+
describe('selectedIndexes', () => {
9+
it('should render correct default selectedIndexes for single group', () => {
10+
const { getByTestId } = render(
11+
<Picker testID="basic-picker">
12+
<PickerGroup>
13+
<PickerItem label="A1" value="A1" />
14+
<PickerItem label="A2" value="A2" />
15+
</PickerGroup>
16+
</Picker>
17+
);
18+
19+
const picker = getByTestId('basic-picker');
20+
21+
expect(picker.props.selectedIndexes).toEqual([0]);
22+
});
23+
24+
it('should render correct selectedIndexes for single group', () => {
25+
const { getByTestId } = render(
26+
<Picker testID="basic-picker">
27+
<PickerGroup selectedValue="A2">
28+
<PickerItem label="A1" value="A1" />
29+
<PickerItem label="A2" value="A2" />
30+
</PickerGroup>
31+
</Picker>
32+
);
33+
34+
const picker = getByTestId('basic-picker');
35+
36+
expect(picker.props.selectedIndexes).toEqual([1]);
37+
});
38+
39+
it('should render correct selectedIndexes for multiple group', () => {
40+
const { getByTestId } = render(
41+
<Picker testID="basic-picker">
42+
<PickerGroup selectedValue="A2">
43+
<PickerItem label="A1" value="A1" />
44+
<PickerItem label="A2" value="A2" />
45+
</PickerGroup>
46+
<PickerGroup selectedValue="C3">
47+
<PickerItem label="C1" value="C1" />
48+
<PickerItem label="C2" value="C2" />
49+
<PickerItem label="C3" value="C3" />
50+
</PickerGroup>
51+
</Picker>
52+
);
53+
54+
const picker = getByTestId('basic-picker');
55+
56+
expect(picker.props.selectedIndexes).toEqual([1, 2]);
57+
});
58+
});
59+
});

0 commit comments

Comments
 (0)