Skip to content

Commit 681e6e0

Browse files
committed
add tabs UT & lodash.merge, update tab UT
1 parent 3b1e35c commit 681e6e0

File tree

5 files changed

+128
-69
lines changed

5 files changed

+128
-69
lines changed

_src /molecules/tabs/Tabs.spec.js

-59
This file was deleted.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
"glob": "^7.1.4",
5454
"jest": "^24.9.0",
5555
"jest-vue-preprocessor": "^1.5.0",
56+
"lodash.merge": "^4.6.2",
5657
"storybook-addon-vue-info": "1.4.2",
5758
"storybook-vue-router": "^1.0.7",
5859
"stylelint": "^11.0.0",

src/atoms/tab/Tab.spec.js

+14-10
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,38 @@
1-
import { shallowMount } from '@vue/test-utils'
1+
import { mount } from '@vue/test-utils'
22
import ATab from './Tab.vue'
33

44
const factory = () => {
5-
const defaultData = {
5+
return mount(ATab, {
66
slots: {
7-
default: '<span>Tab default text</span>'
7+
default: `
8+
<span>
9+
Tab text
10+
</span>
11+
`
812
},
913
propsData: {
1014
name: 'Tab'
1115
}
12-
}
13-
14-
return shallowMount(ATab, defaultData)
16+
})
1517
}
1618

1719
describe('Tab', () => {
18-
it('has default structure', () => {
20+
it('has default structure', async () => {
1921
const wrapper = factory()
2022

21-
expect(wrapper).toBe('DIV')
23+
await wrapper.vm.$nextTick()
24+
25+
expect(wrapper.element.tagName).toBe('DIV')
2226
expect(wrapper.attributes().role).toBeDefined()
23-
expect(wrapper.attributes().role).toEqual('tab')
27+
expect(wrapper.attributes().role).toEqual('tabpanel')
2428
expect(wrapper.attributes('data-tab')).toBeDefined()
2529
})
2630

2731
it('renders slot text when passed', () => {
2832
const wrapper = factory()
2933

3034
expect(wrapper.find('div > span').exists()).toBe(true)
31-
expect(wrapper.find('div > span').text()).toEqual('Tab default text')
35+
expect(wrapper.find('div > span').text()).toEqual('Tab text')
3236
})
3337

3438
it('has correct id attribute', () => {

src/molecules/tabs/Tabs.spec.js

+108
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { shallowMount } from '@vue/test-utils'
2+
import merge from 'lodash.merge'
3+
import ATab from '@atoms/tab/Tab.vue'
4+
import ATabs from './Tabs.vue'
5+
6+
const factory = (customData = {}) => {
7+
const defaultData = {
8+
slots: {
9+
default: `
10+
<a-tab
11+
name="test tab1"
12+
:selected="true"
13+
>
14+
Tab text 1
15+
</a-tab>
16+
<a-tab name="test tab2">
17+
Tab text 2
18+
</a-tab>
19+
`
20+
},
21+
stubs: {
22+
'a-tab': ATab
23+
}
24+
}
25+
26+
return shallowMount(ATabs, merge(defaultData, customData))
27+
}
28+
29+
describe('Tabs', () => {
30+
it('has default structure', async () => {
31+
const wrapper = factory()
32+
33+
await wrapper.vm.$nextTick()
34+
35+
expect(wrapper.element.tagName).toBe('DIV')
36+
})
37+
38+
it('has default structure when content rendered', async () => {
39+
const wrapper = factory()
40+
41+
await wrapper.vm.$nextTick()
42+
43+
expect(wrapper.find('#test-tab1-tab-trigger').exists()).toBe(true)
44+
expect(wrapper.find('#test-tab1-tab').exists()).toBe(true)
45+
expect(wrapper.find('#test-tab2-tab-trigger').exists()).toBe(true)
46+
expect(wrapper.find('#test-tab2-tab').exists()).toBe(true)
47+
})
48+
49+
it('renders slot content when passed', async () => {
50+
const wrapper = factory()
51+
52+
await wrapper.vm.$nextTick()
53+
54+
expect(wrapper.find('#test-tab1-tab-trigger').exists()).toBe(true)
55+
expect(wrapper.find('#test-tab1-tab-trigger').text()).toEqual('test tab1')
56+
expect(wrapper.find('#test-tab1-tab').exists()).toBe(true)
57+
expect(wrapper.find('#test-tab1-tab').text()).toEqual('Tab text 1')
58+
expect(wrapper.find('#test-tab2-tab-trigger').exists()).toBe(true)
59+
expect(wrapper.find('#test-tab2-tab-trigger').text()).toEqual('test tab2')
60+
expect(wrapper.find('#test-tab2-tab').exists()).toBe(true)
61+
expect(wrapper.find('#test-tab2-tab').text()).toEqual('Tab text 2')
62+
})
63+
64+
it('renders custom button', async () => {
65+
const wrapper = factory({
66+
slots: {
67+
button: `
68+
<div data-test="button-slot">
69+
Test slot
70+
</div>
71+
`
72+
}
73+
})
74+
75+
await wrapper.vm.$nextTick()
76+
77+
expect(wrapper.find('[data-test="button-slot"]').exists()).toBe(true)
78+
})
79+
80+
it('switches between tabs', async () => {
81+
const wrapper = factory()
82+
83+
await wrapper.vm.$nextTick()
84+
85+
const firstTrigger = wrapper.find('#test-tab1-tab-trigger')
86+
const secondTrigger = wrapper.find('#test-tab2-tab-trigger')
87+
const firstContent = wrapper.find('#test-tab1-tab')
88+
const secondContent = wrapper.find('#test-tab2-tab')
89+
90+
await firstTrigger.trigger('click')
91+
92+
expect(firstTrigger.attributes('aria-selected')).toEqual('true')
93+
expect(firstTrigger.attributes('aria-expanded')).toEqual('true')
94+
expect(firstContent.isVisible()).toBe(true)
95+
expect(secondTrigger.attributes('aria-selected')).toEqual('false')
96+
expect(secondTrigger.attributes('aria-expanded')).toEqual('false')
97+
expect(secondContent.isVisible()).toBe(false)
98+
99+
await secondTrigger.trigger('click')
100+
101+
expect(firstTrigger.attributes('aria-selected')).toEqual('false')
102+
expect(firstTrigger.attributes('aria-expanded')).toEqual('false')
103+
expect(firstContent.isVisible()).toBe(false)
104+
expect(secondTrigger.attributes('aria-selected')).toEqual('true')
105+
expect(secondTrigger.attributes('aria-expanded')).toEqual('true')
106+
expect(secondContent.isVisible()).toBe(true)
107+
})
108+
})

yarn.lock

+5
Original file line numberDiff line numberDiff line change
@@ -9932,6 +9932,11 @@ lodash.kebabcase@^4.1.1:
99329932
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
99339933
integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
99349934

9935+
lodash.merge@^4.6.2:
9936+
version "4.6.2"
9937+
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
9938+
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
9939+
99359940
lodash.sortby@^4.7.0:
99369941
version "4.7.0"
99379942
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"

0 commit comments

Comments
 (0)