UNPKG

element3

Version:

A Component Library for Vue3

183 lines (166 loc) 4.97 kB
import Drawer from '../Drawer.vue' import { mount } from '@vue/test-utils' import { nextTick } from 'vue' const title = '我是测试 title' const content = 'content' describe('Drawer.vue', () => { it('create', async () => { const wrapper = mount(Drawer, { props: { title: 'title', visible: true } }) expect(wrapper.find('.el-drawer__header').text()).toBe('title') expect(wrapper.find('.el-drawer').attributes().style).not.toBe('none') }) it('should destroy every child after drawer was closed when destroy-on-close flag is true', async () => { const Comp = { template: ` <Drawer :title='title' :visible='visible' :append-to-body='true' :destroy-on-close='true' ref='drawer'> <span>${content}</span> </Drawer> `, data() { return { title, visible: true } }, components: { Drawer } } const wrapper = mount(Comp) await nextTick() expect(wrapper.find('.el-drawer__body span').text()).toBe(content) const drawer = wrapper.findComponent({ name: 'ElDrawer' }) drawer.componentVM.closeDrawer() await nextTick() expect(wrapper.find('.el-drawer__body').exists()).toBe(false) }) it('should invoke before-close', async () => { const beforeClose = jest.fn() const Comp = { template: ` <Drawer :before-close='beforeClose' :title='title' :visible.sync='visible' :append-to-body='true' :destroy-on-close='true' ref='drawer' > <span>${content}</span> </Drawer> `, data() { return { title, visible: true, beforeClose } }, components: { Drawer } } const wrapper = mount(Comp) const drawer = wrapper.findComponent({ name: 'ElDrawer' }) await drawer.componentVM.closeDrawer() expect(beforeClose).toHaveBeenCalled() }) it('should not show close button when show-close flag is false', async () => { const Comp = { template: ` <Drawer :title='title' :visible='visible' ref='drawer' :show-close='false'> <span>${content}</span> </Drawer> `, data() { return { title, visible: false } }, components: { Drawer } } const wrapper = mount(Comp) expect(wrapper.find('.el-drawer__close-btn').exists()).toBe(false) }) it('should have custom classes when custom classes were given', async () => { const classes = 'some-custom-class' const Comp = { template: ` <Drawer :title='title' :visible='visible' ref='drawer' custom-class='${classes}'> <span>${content}</span> </Drawer> `, data() { return { title, visible: false } }, components: { Drawer } } const wrapper = mount(Comp) expect(wrapper.find(`.${classes}`).exists()).toBe(true) }) it('should not render header when withHeader attribute is false', () => { const Comp = { template: ` <Drawer :title='title' :visible='visible' ref='drawer' :with-header='false'> <span>${content}</span> </Drawer> `, data() { return { title, visible: true } }, components: { Drawer } } const wrapper = mount(Comp) expect(wrapper.find('.el-drawer__header').exists()).toBe(false) }) describe('directions', () => { const wrapper = mount(Drawer, { props: { visible: true, title, direction: 'ltr' } }) it('should render from left to right', async () => { await nextTick() expect(wrapper.find('.ltr').exists()).toBe(true) }) it('should render from right to left', async () => { await wrapper.setProps({ direction: 'rtl' }) expect(wrapper.find('.rtl').exists()).toBe(true) }) it('should render from top to bottom', async () => { await wrapper.setProps({ direction: 'ttb' }) expect(wrapper.find('.ttb').exists()).toBe(true) }) it('should render from bottom to top', async () => { await wrapper.setProps({ direction: 'btt' }) expect(wrapper.find('.btt').exists()).toBe(true) }) }) describe('size', () => { const wrapper = mount(Drawer, { props: { visible: true, title, direction: 'ltr', size: '50%' } }) it('should effect height when drawer is vertical', async () => { expect(wrapper.find('.el-drawer').attributes().style).toBe('width: 50%;') }) it('should effect width when drawer is horizontal', async () => { await wrapper.setProps({ direction: 'ttb' }) expect(wrapper.find('.el-drawer').attributes().style).toBe('height: 50%;') }) }) })