Skip to content

Commit cc1aaf1

Browse files
committed
feat: unit test
1 parent 1b7176c commit cc1aaf1

File tree

6 files changed

+174
-16
lines changed

6 files changed

+174
-16
lines changed

dist/VueFinalModal.esm.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/VueFinalModal.esm.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/VueFinalModal.umd.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/VueFinalModal.umd.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/VueFinalModal.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ export default {
172172
},
173173
beforeDestroy() {
174174
this.close()
175-
this.lockScroll && enableBodyScroll(this.$refs.vfmContainer)
175+
this.lockScroll && this.$refs.vfmContainer && enableBodyScroll(this.$refs.vfmContainer)
176176
this?.$el?.remove()
177177
178178
let index = this.api.modals.findIndex(vm => vm === this)

tests/unit/VueFinalModal.spec.js

Lines changed: 169 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
import { createLocalVue, mount } from '@vue/test-utils'
1+
import { createLocalVue, mount, enableAutoDestroy } from '@vue/test-utils'
22
import VueFinalModal from '../../lib'
33

4-
function createOpenedModal(propsData = {}, mountingOptions = {}) {
4+
enableAutoDestroy(afterEach)
5+
6+
function createOpenedModal(propsData = {}, listeners = {}, mountingOptions = {}) {
57
const localVue = createLocalVue()
68
localVue.use(VueFinalModal())
79
return new Promise(resolve => {
10+
const elem = document.createElement('div')
11+
if (document.body) {
12+
document.body.appendChild(elem)
13+
}
814
const wrapper = mount(localVue.options.components.VueFinalModal, {
915
stubs: false,
1016
localVue,
@@ -13,33 +19,185 @@ function createOpenedModal(propsData = {}, mountingOptions = {}) {
1319
...propsData
1420
},
1521
listeners: {
16-
opened: () => resolve({ wrapper, localVue })
22+
opened: () => resolve({ wrapper, localVue }),
23+
input: val => {
24+
wrapper.setProps({ value: val })
25+
},
26+
...listeners
27+
},
28+
attachTo: elem,
29+
...mountingOptions
30+
})
31+
})
32+
}
33+
function createClosedModal(propsData = {}, mountingOptions = {}) {
34+
const localVue = createLocalVue()
35+
localVue.use(VueFinalModal())
36+
return new Promise(resolve => {
37+
const wrapper = mount(localVue.options.components.VueFinalModal, {
38+
stubs: false,
39+
localVue,
40+
propsData: {
41+
value: false,
42+
...propsData
1743
},
1844
...mountingOptions
1945
})
46+
resolve({ wrapper, localVue })
2047
})
2148
}
2249

2350
describe('VueFinalModal.vue', () => {
24-
describe('props', () => {
51+
describe('default props', () => {
2552
it('value', async () => {
2653
const { wrapper } = await createOpenedModal()
2754
expect(wrapper.find('.vfm').isVisible()).toBe(true)
28-
wrapper.destroy()
55+
})
56+
it('ssr: true', async () => {
57+
const { wrapper } = await createClosedModal()
58+
expect(wrapper.find('.vfm').exists()).toBe(true)
2959
})
3060
it('lockScroll: true', async () => {
31-
const { wrapper } = await createOpenedModal({
32-
lockScroll: true
33-
})
61+
await createOpenedModal()
3462
expect(document.body.style.overflow).toBe('hidden')
35-
wrapper.destroy()
3663
})
64+
it('hideOverlay: false', async () => {
65+
const { wrapper } = await createOpenedModal()
66+
expect(wrapper.find('.vfm__overlay').isVisible()).toBe(true)
67+
})
68+
it('clickToClose: true', async done => {
69+
const { wrapper } = await createOpenedModal()
70+
wrapper.find('.vfm__container').trigger('click')
71+
setTimeout(() => {
72+
expect(wrapper.find('.vfm').isVisible()).toBe(false)
73+
done()
74+
}, 200)
75+
})
76+
it('escToClose: false', async done => {
77+
const { wrapper } = await createOpenedModal()
78+
wrapper.find('.vfm__container').trigger('keydown.esc')
79+
setTimeout(() => {
80+
expect(wrapper.find('.vfm').isVisible()).toBe(true)
81+
done()
82+
}, 200)
83+
})
84+
it('preventClick: false', async () => {
85+
const { wrapper } = await createOpenedModal()
86+
expect(wrapper.find('.vfm').classes('vfm--prevent-none')).toBe(false)
87+
expect(wrapper.find('.vfm__content').classes('vfm--prevent-auto')).toBe(false)
88+
})
89+
it('focusRetain: true', async () => {
90+
const { wrapper } = await createOpenedModal()
91+
expect(document.activeElement === wrapper.find('.vfm__container').vm.$el).toBe(true)
92+
})
93+
})
94+
describe('specific props', () => {
3795
it('lockScroll: false', async () => {
38-
const { wrapper } = await createOpenedModal({
96+
await createOpenedModal({
3997
lockScroll: false
4098
})
4199
expect(document.body.style.overflow).not.toBe('hidden')
42-
wrapper.destroy()
100+
})
101+
it('ssr: false', async () => {
102+
const { wrapper } = await createClosedModal({
103+
ssr: false
104+
})
105+
expect(wrapper.find('.vfm').exists()).toBe(false)
106+
})
107+
it('classes', async () => {
108+
const testClass = 'test-class'
109+
const { wrapper } = await createClosedModal({
110+
classes: testClass
111+
})
112+
expect(wrapper.find('.vfm__container').classes()).toContain(testClass)
113+
})
114+
it('styles', async () => {
115+
const testStyle = 'background: rgb(255, 255, 255);'
116+
const { wrapper } = await createClosedModal({
117+
styles: testStyle
118+
})
119+
expect(wrapper.find('.vfm__container').attributes('style')).toContain(testStyle)
120+
})
121+
it('overlayClass', async () => {
122+
const testClass = 'test-class'
123+
const { wrapper } = await createClosedModal({
124+
overlayClass: testClass
125+
})
126+
expect(wrapper.find('.vfm__overlay').classes()).toContain(testClass)
127+
})
128+
it('overlayStyle', async () => {
129+
const testStyle = 'background: rgb(255, 255, 255);'
130+
const { wrapper } = await createClosedModal({
131+
overlayStyle: testStyle
132+
})
133+
expect(wrapper.find('.vfm__overlay').attributes('style')).toContain(testStyle)
134+
})
135+
it('contentClass', async () => {
136+
const testClass = 'test-class'
137+
const { wrapper } = await createClosedModal({
138+
contentClass: testClass
139+
})
140+
expect(wrapper.find('.vfm__content').classes()).toContain(testClass)
141+
})
142+
it('contentStyle', async () => {
143+
const testStyle = 'background: rgb(255, 255, 255);'
144+
const { wrapper } = await createClosedModal({
145+
contentStyle: testStyle
146+
})
147+
expect(wrapper.find('.vfm__content').attributes('style')).toContain(testStyle)
148+
})
149+
it('hideOverlay: true', async () => {
150+
const { wrapper } = await createOpenedModal({
151+
hideOverlay: true
152+
})
153+
expect(wrapper.find('.vfm__overlay').isVisible()).toBe(false)
154+
})
155+
it('clickToClose: false', async done => {
156+
const { wrapper } = await createOpenedModal({
157+
clickToClose: false
158+
})
159+
wrapper.find('.vfm__container').trigger('click')
160+
setTimeout(() => {
161+
expect(wrapper.find('.vfm').isVisible()).toBe(true)
162+
done()
163+
}, 200)
164+
})
165+
it('escToClose: false', async done => {
166+
const { wrapper } = await createOpenedModal({
167+
escToClose: true
168+
})
169+
wrapper.find('.vfm__container').trigger('keydown.esc')
170+
setTimeout(() => {
171+
expect(wrapper.find('.vfm').isVisible()).toBe(false)
172+
done()
173+
}, 200)
174+
})
175+
it('preventClick: true', async () => {
176+
const { wrapper } = await createOpenedModal({
177+
preventClick: true
178+
})
179+
expect(wrapper.find('.vfm').classes('vfm--prevent-none')).toBe(true)
180+
expect(wrapper.find('.vfm__content').classes('vfm--prevent-auto')).toBe(true)
181+
})
182+
it('attach: body', async () => {
183+
const elem = document.createElement('div')
184+
document.body.appendChild(elem)
185+
const { wrapper } = await createOpenedModal({
186+
attach: elem
187+
})
188+
expect(wrapper.vm.$el.parentNode === elem).toBe(true)
189+
})
190+
it('focusRetain: false', async () => {
191+
const { wrapper } = await createOpenedModal({
192+
focusRetain: false
193+
})
194+
expect(document.activeElement === wrapper.find('.vfm__container').vm.$el).toBe(false)
195+
})
196+
it('focusTrap: true', async () => {
197+
const { wrapper } = await createOpenedModal({
198+
focusTrap: true
199+
})
200+
expect(document.activeElement === wrapper.find('.vfm__container').vm.$el).toBe(true)
43201
})
44202
})
45203
})

0 commit comments

Comments
 (0)