-
-
Notifications
You must be signed in to change notification settings - Fork 142
/
Copy pathPanel.spec.tsx
126 lines (103 loc) · 3.82 KB
/
Panel.spec.tsx
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
119
120
121
122
123
124
125
126
import { fireEvent, render } from '@testing-library/react';
import React from 'react';
import Cascader, { type CascaderProps } from '../src';
describe('Cascader.Panel', () => {
beforeEach(() => {
jest.useFakeTimers();
});
afterEach(() => {
jest.useRealTimers();
});
const options: CascaderProps['options'] = [
{
label: 'Light',
value: 'light',
},
{
label: 'Bamboo',
value: 'bamboo',
children: [
{
label: 'Little',
value: 'little',
},
],
},
];
it('basic', () => {
const onChange = jest.fn();
const { container } = render(<Cascader.Panel options={options} onChange={onChange} />);
expect(container.querySelector('.rc-cascader-panel')).toBeTruthy();
expect(container.querySelectorAll('.rc-cascader-menu')).toHaveLength(1);
// Click first column
fireEvent.click(container.querySelectorAll('.rc-cascader-menu-item')[1]);
expect(container.querySelectorAll('.rc-cascader-menu')).toHaveLength(2);
// Click second column
fireEvent.click(container.querySelectorAll('.rc-cascader-menu-item')[2]);
expect(onChange).toHaveBeenCalledWith(['bamboo', 'little'], expect.anything());
});
it('multiple', () => {
const onChange = jest.fn();
const { container } = render(
<Cascader.Panel checkable options={options} onChange={onChange} />,
);
// Click first column - light
fireEvent.click(container.querySelectorAll('.rc-cascader-menu-item')[0]);
expect(onChange).toHaveBeenCalledWith([['light']], expect.anything());
onChange.mockReset();
// Click first column - bamboo (no trigger onChange)
fireEvent.click(container.querySelectorAll('.rc-cascader-menu-item')[1]);
expect(onChange).not.toHaveBeenCalled();
// Click second column - little
fireEvent.click(container.querySelectorAll('.rc-cascader-menu-item')[2]);
expect(onChange).toHaveBeenCalledWith([['light'], ['bamboo']], expect.anything());
});
it('multiple with showCheckedStrategy', () => {
const onChange = jest.fn();
const { container } = render(
<Cascader.Panel
checkable
options={options}
onChange={onChange}
showCheckedStrategy="SHOW_CHILD"
/>,
);
fireEvent.click(container.querySelectorAll('.rc-cascader-checkbox')[1]);
expect(onChange).toHaveBeenCalledWith([['bamboo', 'little']], expect.anything());
});
it('multiple with defaultActiveKey', () => {
const onChange = jest.fn();
const { container } = render(
<Cascader.Panel
checkable
options={options}
onChange={onChange}
defaultActiveKey={['bamboo', 'little']}
/>,
);
expect(container.querySelectorAll('.rc-cascader-menu')).toHaveLength(2);
});
it('rtl', () => {
const { container } = render(<Cascader.Panel options={options} direction="rtl" />);
expect(container.querySelector('.rc-cascader-panel-rtl')).toBeTruthy();
});
it('notFoundContent', () => {
const { container } = render(<Cascader.Panel notFoundContent="Hello World" />);
expect(container.querySelector('.rc-cascader-panel-empty')?.textContent).toEqual('Hello World');
});
it('control', () => {
const { container } = render(<Cascader.Panel options={options} value={['bamboo', 'little']} />);
const checkedLi = container.querySelector('[aria-checked="true"]');
expect(checkedLi?.textContent).toEqual('Little');
});
it('disabled', () => {
const onChange = jest.fn();
const { container } = render(
<Cascader.Panel options={options} onChange={onChange} disabled={true} />,
);
expect(container.querySelector('.rc-cascader-menu-item-disabled')).toBeTruthy();
const selectOption = container.querySelector('.rc-cascader-menu-item')!;
fireEvent.click(selectOption);
expect(onChange).not.toHaveBeenCalled();
});
});