-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Expand file tree
/
Copy pathTouchableRipple.test.tsx
More file actions
118 lines (92 loc) · 3.04 KB
/
TouchableRipple.test.tsx
File metadata and controls
118 lines (92 loc) · 3.04 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import React from 'react';
import { Platform, Text } from 'react-native';
import { render, fireEvent } from '@testing-library/react-native';
import TouchableRipple from '../TouchableRipple/TouchableRipple.native';
describe('TouchableRipple', () => {
it('renders children correctly', () => {
const { getByText } = render(
<TouchableRipple>
<Text>Button</Text>
</TouchableRipple>
);
expect(getByText('Button')).toBeTruthy();
});
it('calls onPress when pressed', () => {
const onPress = jest.fn();
const { getByText } = render(
<TouchableRipple onPress={onPress}>
<Text>Button</Text>
</TouchableRipple>
);
fireEvent.press(getByText('Button'));
expect(onPress).toHaveBeenCalledTimes(1);
});
it('debounces onPress when debounce prop is provided', () => {
jest.useFakeTimers();
const onPress = jest.fn();
const { getByText } = render(
<TouchableRipple onPress={onPress} debounce={300}>
<Text>Button</Text>
</TouchableRipple>
);
const button = getByText('Button');
// Press multiple times rapidly
fireEvent.press(button);
fireEvent.press(button);
fireEvent.press(button);
// Should only be called once due to debouncing
expect(onPress).toHaveBeenCalledTimes(1);
// Fast forward time past debounce window
jest.advanceTimersByTime(400);
// Now pressing should work again
fireEvent.press(button);
expect(onPress).toHaveBeenCalledTimes(2);
jest.useRealTimers();
});
it('does not debounce when debounce is not provided', () => {
const onPress = jest.fn();
const { getByText } = render(
<TouchableRipple onPress={onPress}>
<Text>Button</Text>
</TouchableRipple>
);
const button = getByText('Button');
// Press multiple times rapidly
fireEvent.press(button);
fireEvent.press(button);
fireEvent.press(button);
// Should be called for each press
expect(onPress).toHaveBeenCalledTimes(3);
});
it('disables the button when disabled prop is true', () => {
const onPress = jest.fn();
const { getByText } = render(
<TouchableRipple disabled onPress={onPress}>
<Text>Button</Text>
</TouchableRipple>
);
fireEvent.press(getByText('Button'));
expect(onPress).not.toHaveBeenCalled();
});
describe('on iOS', () => {
Platform.OS = 'ios';
it('displays the underlay when pressed', () => {
const { getByTestId } = render(
<TouchableRipple testOnly_pressed>
<Text>Press me!</Text>
</TouchableRipple>
);
const underlay = getByTestId('touchable-ripple-underlay');
expect(underlay).toBeDefined();
});
it('renders custom underlay color', () => {
const { getByTestId } = render(
<TouchableRipple testOnly_pressed underlayColor="purple">
<Text>Press me!</Text>
</TouchableRipple>
);
const underlay = getByTestId('touchable-ripple-underlay');
expect(underlay).toHaveStyle({ backgroundColor: 'purple' });
});
});
});