import { mount } from '@vue/test-utils';
import Drawer from '..';
import Button from '../../button';
import { asyncExpect } from '@/tests/utils';
const DrawerEventTester = {
props: {
maskClosable: {
type: Boolean,
default: true,
},
destroyOnClose: {
type: Boolean,
default: false,
},
},
data() {
return {
visible: false,
};
},
mounted() {
this.$nextTick(() => {
this.visible = true;
});
},
methods: {
onClose() {
this.visible = false;
},
open() {
this.visible = true;
},
},
render() {
const drawerProps = {
props: {
visible: this.visible,
getContainer: false,
...this.$props,
},
on: {
close: this.onClose,
},
};
return (
Here is content of Drawer
);
},
};
describe('Drawer', () => {
it('render correctly', async () => {
const wrapper = mount(DrawerEventTester, {
sync: false,
});
await asyncExpect(() => {
const body = wrapper.find('.ant-drawer-body').exists();
expect(body).toBe(true);
wrapper.find('button.ant-btn').trigger('click');
const content = wrapper.find('.ant-drawer-body').vnode.elm.innerHTML;
expect(content).toBe('Here is content of Drawer');
expect(wrapper.html()).toMatchSnapshot();
});
}, 1000);
it('mask trigger onClose', async () => {
const wrapper = mount(DrawerEventTester, {
sync: false,
});
await asyncExpect(() => {
wrapper.find('button.ant-btn').trigger('click');
expect(wrapper.vm.visible).toBe(true);
wrapper.find('.ant-drawer-mask').trigger('click');
expect(wrapper.vm.visible).toBe(false);
});
});
it('close button trigger onClose', async () => {
const wrapper = mount(DrawerEventTester, {
sync: false,
});
await asyncExpect(() => {
wrapper.find('button.ant-btn').trigger('click');
expect(wrapper.vm.visible).toBe(true);
wrapper.find('.ant-drawer-close').trigger('click');
expect(wrapper.vm.visible).toBe(false);
});
});
it('maskClosable no trigger onClose', async () => {
const wrapper = mount(DrawerEventTester, {
propsData: {
maskClosable: false,
},
sync: false,
});
await asyncExpect(() => {
wrapper.find('button.ant-btn').trigger('click');
expect(wrapper.vm.visible).toBe(true);
wrapper.find('.ant-drawer-mask').trigger('click');
expect(wrapper.vm.visible).toBe(true);
});
});
it('destroyOnClose is true onClose', async () => {
const wrapper = mount(DrawerEventTester, {
propsData: {
destroyOnClose: true,
},
sync: false,
});
await asyncExpect(() => {
wrapper.find('button.ant-btn').trigger('click');
expect(wrapper.find('.ant-drawer-wrapper-body').exists()).toBe(true);
wrapper.setData({
visible: false,
});
wrapper.find('.ant-drawer-wrapper-body').trigger('transitionend');
});
await asyncExpect(() => {
expect(wrapper.find('.ant-drawer-wrapper-body').exists()).toBe(false);
});
});
it('no mask and no closable', async () => {
const wrapper = mount(DrawerEventTester, {
propsData: {
destroyOnClose: true,
},
sync: false,
});
await asyncExpect(() => {
wrapper.find('button.ant-btn').trigger('click');
expect(wrapper.vm.visible).toBe(true);
wrapper.find('.ant-drawer-close').trigger('click');
expect(wrapper.vm.visible).toBe(false);
});
});
});