Skip to content

Commit 1a7936c

Browse files
committed
test: add Cascader test
1 parent 2f2c7f9 commit 1a7936c

File tree

2 files changed

+292
-0
lines changed

2 files changed

+292
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`Cascader can be selected 1`] = `
4+
<div>
5+
<div class="ant-cascader-menus ant-cascader-menus-placement-bottomLeft" style="left: -999px; top: -995px;">
6+
<div class="ant-cascader-menus-content">
7+
<ul class="ant-cascader-menu">
8+
<li title="Zhejiang" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-active">Zhejiang</li>
9+
<li title="Jiangsu" class="ant-cascader-menu-item ant-cascader-menu-item-expand">Jiangsu</li>
10+
</ul>
11+
<ul class="ant-cascader-menu">
12+
<li title="Hangzhou" class="ant-cascader-menu-item ant-cascader-menu-item-expand">Hangzhou</li>
13+
</ul>
14+
</div>
15+
</div>
16+
</div>
17+
`;
18+
19+
exports[`Cascader can be selected 2`] = `
20+
<div>
21+
<div class="ant-cascader-menus ant-cascader-menus-placement-bottomLeft" style="left: -999px; top: -995px;">
22+
<div class="ant-cascader-menus-content">
23+
<ul class="ant-cascader-menu">
24+
<li title="Zhejiang" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-active">Zhejiang</li>
25+
<li title="Jiangsu" class="ant-cascader-menu-item ant-cascader-menu-item-expand">Jiangsu</li>
26+
</ul>
27+
<ul class="ant-cascader-menu">
28+
<li title="Hangzhou" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-active">Hangzhou</li>
29+
</ul>
30+
<ul class="ant-cascader-menu">
31+
<li title="West Lake" class="ant-cascader-menu-item">West Lake</li>
32+
</ul>
33+
</div>
34+
</div>
35+
</div>
36+
`;
37+
38+
exports[`Cascader can be selected 3`] = `
39+
<div>
40+
<div class="ant-cascader-menus ant-cascader-menus-placement-bottomLeft" style="display: none; left: -999px; top: -995px;">
41+
<div class="ant-cascader-menus-content">
42+
<ul class="ant-cascader-menu">
43+
<li title="Zhejiang" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-active">Zhejiang</li>
44+
<li title="Jiangsu" class="ant-cascader-menu-item ant-cascader-menu-item-expand">Jiangsu</li>
45+
</ul>
46+
<ul class="ant-cascader-menu">
47+
<li title="Hangzhou" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-active">Hangzhou</li>
48+
</ul>
49+
<ul class="ant-cascader-menu">
50+
<li title="West Lake" class="ant-cascader-menu-item ant-cascader-menu-item-active">West Lake</li>
51+
</ul>
52+
</div>
53+
</div>
54+
</div>
55+
`;
56+
57+
exports[`Cascader popup correctly when panel is hidden 1`] = `
58+
<div>
59+
<div class="ant-cascader-menus ant-cascader-menus-empty ant-cascader-menus-placement-bottomLeft" style="display: none; left: -999px; top: -995px;">
60+
<div class="ant-cascader-menus-content"></div>
61+
</div>
62+
</div>
63+
`;
64+
65+
exports[`Cascader popup correctly when panel is open 1`] = `
66+
<div>
67+
<div class="ant-cascader-menus ant-cascader-menus-placement-bottomLeft" style="left: -999px; top: -995px;">
68+
<div class="ant-cascader-menus-content">
69+
<ul class="ant-cascader-menu">
70+
<li title="Zhejiang" class="ant-cascader-menu-item ant-cascader-menu-item-expand">Zhejiang</li>
71+
<li title="Jiangsu" class="ant-cascader-menu-item ant-cascader-menu-item-expand">Jiangsu</li>
72+
</ul>
73+
</div>
74+
</div>
75+
</div>
76+
`;
77+
78+
exports[`Cascader popup correctly with defaultValue 1`] = `
79+
<div>
80+
<div class="ant-cascader-menus ant-cascader-menus-placement-bottomLeft" style="left: -999px; top: -995px;">
81+
<div class="ant-cascader-menus-content">
82+
<ul class="ant-cascader-menu">
83+
<li title="Zhejiang" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-active">Zhejiang</li>
84+
<li title="Jiangsu" class="ant-cascader-menu-item ant-cascader-menu-item-expand">Jiangsu</li>
85+
</ul>
86+
<ul class="ant-cascader-menu">
87+
<li title="Hangzhou" class="ant-cascader-menu-item ant-cascader-menu-item-expand ant-cascader-menu-item-active">Hangzhou</li>
88+
</ul>
89+
<ul class="ant-cascader-menu">
90+
<li title="West Lake" class="ant-cascader-menu-item">West Lake</li>
91+
</ul>
92+
</div>
93+
</div>
94+
</div>
95+
`;
96+
97+
exports[`Cascader support controlled mode 1`] = `
98+
<span tabindex="0" class="ant-cascader-picker"><input value="" type="text" readonly="true" class="ant-input ant-cascader-input ant-cascader-input "><span class="ant-cascader-picker-label">Zhejiang / Hangzhou / West Lake</span>
99+
<i class="anticon anticon-cross-circle ant-cascader-picker-clear"></i>
100+
<i class="anticon anticon-down ant-cascader-picker-arrow"></i>
101+
</span>
102+
`;
+190
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
import { asyncExpect } from '@/tests/utils'
2+
import { mount } from '@vue/test-utils'
3+
import KeyCode from '../../_util/KeyCode'
4+
import Cascader from '..'
5+
import focusTest from '../../../tests/shared/focusTest'
6+
7+
const options = [{
8+
value: 'zhejiang',
9+
label: 'Zhejiang',
10+
children: [{
11+
value: 'hangzhou',
12+
label: 'Hangzhou',
13+
children: [{
14+
value: 'xihu',
15+
label: 'West Lake',
16+
}],
17+
}],
18+
}, {
19+
value: 'jiangsu',
20+
label: 'Jiangsu',
21+
children: [{
22+
value: 'nanjing',
23+
label: 'Nanjing',
24+
children: [{
25+
value: 'zhonghuamen',
26+
label: 'Zhong Hua Men',
27+
}],
28+
}],
29+
}]
30+
31+
describe('Cascader', () => {
32+
focusTest(Cascader)
33+
34+
it('popup correctly when panel is hidden', async () => {
35+
const wrapper = mount(Cascader, { propsData: { options }, sync: false })
36+
const CascaderWrapper = mount({
37+
render () {
38+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
39+
},
40+
}, { sync: false })
41+
await asyncExpect(() => {
42+
expect(CascaderWrapper.html()).toMatchSnapshot()
43+
})
44+
})
45+
46+
it('popup correctly when panel is open', async () => {
47+
const wrapper = mount(Cascader, { propsData: { options }, sync: false })
48+
await asyncExpect(() => {
49+
wrapper.find('input').trigger('click')
50+
})
51+
let CascaderWrapper = null
52+
await asyncExpect(() => {
53+
CascaderWrapper = mount({
54+
render () {
55+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
56+
},
57+
}, { sync: false })
58+
})
59+
await asyncExpect(() => {
60+
expect(CascaderWrapper.html()).toMatchSnapshot()
61+
})
62+
})
63+
64+
it('support controlled mode', async () => {
65+
const wrapper = mount(Cascader, { propsData: { options }, sync: false })
66+
await asyncExpect(() => {
67+
wrapper.setProps({
68+
value: ['zhejiang', 'hangzhou', 'xihu'],
69+
})
70+
})
71+
await asyncExpect(() => {
72+
expect(wrapper.html()).toMatchSnapshot()
73+
})
74+
})
75+
76+
it('popup correctly with defaultValue', async () => {
77+
const wrapper = mount(Cascader, {
78+
propsData: {
79+
options,
80+
defaultValue: ['zhejiang', 'hangzhou'],
81+
}, sync: false })
82+
83+
await asyncExpect(() => {
84+
wrapper.find('input').trigger('click')
85+
})
86+
let CascaderWrapper = null
87+
await asyncExpect(() => {
88+
CascaderWrapper = mount({
89+
render () {
90+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
91+
},
92+
}, { sync: false })
93+
})
94+
95+
await asyncExpect(() => {
96+
expect(CascaderWrapper.html()).toMatchSnapshot()
97+
})
98+
})
99+
100+
it('can be selected', async () => {
101+
const wrapper = mount(Cascader, { propsData: { options }, sync: false })
102+
await asyncExpect(() => {
103+
wrapper.find('input').trigger('click')
104+
})
105+
let popupWrapper = null
106+
await asyncExpect(() => {
107+
popupWrapper = mount({
108+
render () {
109+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
110+
},
111+
}, { sync: false })
112+
})
113+
await asyncExpect(() => {
114+
popupWrapper.findAll('.ant-cascader-menu').at(0).findAll('.ant-cascader-menu-item').at(0)
115+
.trigger('click')
116+
})
117+
await asyncExpect(() => {
118+
popupWrapper = mount({
119+
render () {
120+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
121+
},
122+
}, { sync: false })
123+
})
124+
125+
await asyncExpect(() => {
126+
expect(popupWrapper.html()).toMatchSnapshot()
127+
})
128+
await asyncExpect(() => {
129+
popupWrapper = mount({
130+
render () {
131+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
132+
},
133+
}, { sync: false })
134+
})
135+
await asyncExpect(() => {
136+
popupWrapper.findAll('.ant-cascader-menu').at(1).findAll('.ant-cascader-menu-item').at(0)
137+
.trigger('click')
138+
})
139+
await asyncExpect(() => {
140+
popupWrapper = mount({
141+
render () {
142+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
143+
},
144+
}, { sync: false })
145+
})
146+
await asyncExpect(() => {
147+
expect(popupWrapper.html()).toMatchSnapshot()
148+
})
149+
await asyncExpect(() => {
150+
popupWrapper = mount({
151+
render () {
152+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
153+
},
154+
}, { sync: false })
155+
})
156+
await asyncExpect(() => {
157+
popupWrapper.findAll('.ant-cascader-menu').at(2).findAll('.ant-cascader-menu-item').at(0)
158+
.trigger('click')
159+
})
160+
await asyncExpect(() => {
161+
popupWrapper = mount({
162+
render () {
163+
return wrapper.find({ name: 'Trigger' }).vm.getComponent()
164+
},
165+
}, { sync: false })
166+
})
167+
await asyncExpect(() => {
168+
expect(popupWrapper.html()).toMatchSnapshot()
169+
})
170+
})
171+
172+
it('backspace should work with `Cascader[showSearch]`', async () => {
173+
const wrapper = mount(Cascader, { propsData: { options, showSearch: true }, sync: false })
174+
await asyncExpect(() => {
175+
wrapper.find('input').element.value = '123'
176+
wrapper.find('input').trigger('input')
177+
})
178+
await asyncExpect(() => {
179+
expect(wrapper.vm.inputValue).toBe('123')
180+
})
181+
await asyncExpect(() => {
182+
wrapper.find('input').element.keyCode = KeyCode.BACKSPACE
183+
wrapper.find('input').trigger('keydown')
184+
})
185+
await asyncExpect(() => {
186+
// trigger onKeyDown will not trigger onChange by default, so the value is still '123'
187+
expect(wrapper.vm.inputValue).toBe('123')
188+
})
189+
})
190+
})

0 commit comments

Comments
 (0)