🌐 AI搜索 & 代理 主页
Skip to content

Commit e918f3d

Browse files
committed
Update nav-item-dropdown.spec.js
1 parent 389b300 commit e918f3d

File tree

1 file changed

+82
-12
lines changed

1 file changed

+82
-12
lines changed
Lines changed: 82 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,39 @@
11
import { mount } from '@vue/test-utils'
2+
import { waitNT } from '../../../tests/utils'
23
import { BNavItemDropdown } from './nav-item-dropdown'
34

45
describe('nav-item-dropdown', () => {
5-
it('should have custom toggle class in nav-item-dropdown', async () => {
6+
it('has expected default structure', async () => {
67
const wrapper = mount(BNavItemDropdown, {
78
propsData: {
8-
text: 'toggle',
9-
toggleClass: 'nav-link-custom'
9+
text: 'toggle'
1010
}
1111
})
12+
1213
expect(wrapper.vm).toBeDefined()
13-
expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
14-
const $toggle = wrapper.find('.dropdown-toggle')
14+
await waitNT(wrapper.vm)
1515

16-
expect($toggle.classes()).toContain('nav-link')
16+
expect(wrapper.element.tagName).toBe('LI')
17+
expect(wrapper.element.hasAttribute('id')).toBe(true)
18+
expect(wrapper.classes()).toContain('nav-item')
19+
expect(wrapper.classes()).toContain('b-nav-dropdown')
20+
expect(wrapper.classes()).toContain('dropdown')
21+
22+
const $toggle = wrapper.find('.dropdown-toggle')
23+
expect($toggle.element.tagName).toBe('A')
24+
expect($toggle.element.hasAttribute('id')).toBe(true)
25+
expect($toggle.attributes('role')).toEqual('button')
26+
expect($toggle.attributes('aria-haspopup')).toEqual('true')
27+
expect($toggle.attributes('aria-expanded')).toEqual('false')
28+
expect($toggle.attributes('href')).toEqual(`#${$toggle.attributes('id')}`)
1729
expect($toggle.classes()).toContain('dropdown-toggle')
18-
expect($toggle.classes()).toContain('nav-link-custom')
30+
expect($toggle.classes()).toContain('nav-link')
31+
32+
const $menu = wrapper.find('.dropdown-menu')
33+
expect($menu.element.tagName).toBe('UL')
34+
expect($menu.attributes('tabindex')).toEqual('-1')
35+
expect($menu.attributes('aria-labelledby')).toEqual($toggle.attributes('id'))
36+
expect($menu.classes()).toContain('dropdown-menu')
1937

2038
wrapper.destroy()
2139
})
@@ -26,31 +44,83 @@ describe('nav-item-dropdown', () => {
2644
text: 'toggle'
2745
}
2846
})
29-
expect(wrapper.vm).toBeDefined()
3047

48+
expect(wrapper.vm).toBeDefined()
3149
expect(wrapper.vm.isNav).toBe(true)
3250

3351
wrapper.destroy()
3452
})
3553

54+
it('should have custom toggle class in nav-item-dropdown', async () => {
55+
const wrapper = mount(BNavItemDropdown, {
56+
propsData: {
57+
text: 'toggle',
58+
toggleClass: 'nav-link-custom'
59+
}
60+
})
61+
62+
expect(wrapper.vm).toBeDefined()
63+
64+
await waitNT(wrapper.vm)
65+
66+
const $toggle = wrapper.find('.dropdown-toggle')
67+
expect($toggle.element.tagName).toBe('A')
68+
expect($toggle.attributes('href')).toEqual(`#${$toggle.attributes('id')}`)
69+
expect($toggle.classes()).toContain('nav-link')
70+
expect($toggle.classes()).toContain('dropdown-toggle')
71+
expect($toggle.classes()).toContain('nav-link-custom')
72+
73+
wrapper.destroy()
74+
})
75+
3676
it('should be disabled when disabled prop set', async () => {
3777
const wrapper = mount(BNavItemDropdown, {
3878
propsData: {
3979
text: 'toggle',
4080
disabled: true
4181
}
4282
})
83+
4384
expect(wrapper.vm).toBeDefined()
44-
expect(wrapper.findAll('.dropdown-toggle').length).toBe(1)
85+
86+
await waitNT(wrapper.vm)
87+
4588
const $toggle = wrapper.find('.dropdown-toggle')
4689
expect($toggle.element.tagName).toBe('A')
47-
48-
expect($toggle.attributes('aria-disabled')).toBeDefined()
49-
expect($toggle.attributes('href')).toEqual('#')
90+
expect($toggle.attributes('role')).toEqual('button')
91+
expect($toggle.attributes('href')).toEqual(`#${$toggle.attributes('id')}`)
92+
expect($toggle.classes()).toContain('nav-link')
93+
expect($toggle.classes()).toContain('dropdown-toggle')
5094
expect($toggle.classes()).toContain('disabled')
95+
expect($toggle.attributes('aria-disabled')).toBeDefined()
96+
97+
wrapper.destroy()
98+
})
99+
100+
it('should prevent click when custom href is set', async () => {
101+
const wrapper = mount(BNavItemDropdown, {
102+
propsData: {
103+
text: 'toggle',
104+
href: '/foobar'
105+
}
106+
})
107+
108+
expect(wrapper.vm).toBeDefined()
109+
110+
await waitNT(wrapper.vm)
111+
112+
const $toggle = wrapper.find('.dropdown-toggle')
113+
expect($toggle.element.tagName).toBe('A')
114+
expect($toggle.attributes('href')).toEqual('/foobar')
51115
expect($toggle.classes()).toContain('nav-link')
52116
expect($toggle.classes()).toContain('dropdown-toggle')
53117

118+
await $toggle.trigger('click')
119+
expect(wrapper.emitted('toggle')).toBeDefined()
120+
expect(wrapper.emitted('toggle').length).toBe(1)
121+
expect(wrapper.emitted('toggle')[0]).toBeDefined()
122+
expect(wrapper.emitted('toggle')[0][0].defaultPrevented).toBe(true)
123+
54124
wrapper.destroy()
55125
})
56126
})

0 commit comments

Comments
 (0)