import { mount } from '@vue/test-utils' import Drawer from '..' import Button from '../../button' import { asyncExpect } from '@/tests/utils' export function $$ (className) { return document.body.querySelectorAll(className) } const MultiDrawer = { props: { placement: { type: String, default: 'right', }, }, data () { return { visible: false, childrenDrawer: false, } }, methods: { showDrawer () { this.visible = true }, onClose () { this.visible = false }, showChildrenDrawer () { this.childrenDrawer = true }, onChildrenDrawerClose () { console.log('hello') this.childrenDrawer = false }, }, render () { const drawerProps = { props: { title: 'Multi-level drawer', width: 520, visible: this.visible, getContainer: false, wrapClassName: 'test_drawer', placement: this.placement, }, on: { close: this.onClose, }, } const childrenDrawerProps = { props: { title: 'Two-level Drawer', width: 320, wrapClassName: 'Two-level', visible: this.childrenDrawer, getContainer: false, placement: this.placement, }, on: { close: this.onChildrenDrawerClose, }, } const buttonProps = { props: { type: 'primary', }, attrs: { id: 'open_drawer', }, on: { click: this.showDrawer, }, } return ( <div> <Button {...buttonProps}>open</Button> <Drawer {...drawerProps} > <Button type='primary' id='open_two_drawer' onClick={this.showChildrenDrawer}> Two-level drawer </Button> <Drawer {...childrenDrawerProps} > <div id='two_drawer_text'> This is two-level drawer </div> </Drawer> <div style={{ position: 'absolute', bottom: 0, width: '100%', borderTop: '1px solid #e8e8e8', padding: '10px 16px', textAlign: 'right', left: 0, background: '#fff', borderRadius: '0 0 4px 4px', }} > <Button style={{ marginRight: 8, }} onClick={this.onClose} > Cancel </Button> <Button onClick={this.onClose} type='primary'> Submit </Button> </div> </Drawer> </div> ) }, } describe('Drawer', () => { it('render right MultiDrawer', async () => { const wrapper = mount(MultiDrawer, { propsData: { placement: 'right', }, sync: false, }) await asyncExpect(() => { wrapper.find('#open_drawer').trigger('click') }, 0) await asyncExpect(() => { wrapper.find('#open_two_drawer').trigger('click') }, 0) await asyncExpect(() => { const translateX = wrapper.find('.ant-drawer.test_drawer').element.parentElement.style.transform expect(translateX).toEqual('translateX(-180px)') expect(wrapper.find('#two_drawer_text').exists()).toBe(true) }, 1000) }) it('render left MultiDrawer', async () => { document.body.innerHTML = '' const wrapper = mount(MultiDrawer, { propsData: { placement: 'left', }, sync: false, }) await asyncExpect(() => { wrapper.find('#open_drawer').trigger('click') }, 0) await asyncExpect(() => { wrapper.find('#open_two_drawer').trigger('click') }, 0) await asyncExpect(() => { const translateX = wrapper.find('.ant-drawer.test_drawer').element.parentElement.style.transform expect(translateX).toEqual('translateX(180px)') expect(wrapper.find('#two_drawer_text').exists()).toBe(true) }, 1000) }) it('render top MultiDrawer', async () => { const wrapper = mount(MultiDrawer, { propsData: { placement: 'top', }, sync: false, }) await asyncExpect(() => { wrapper.find('#open_drawer').trigger('click') }, 0) await asyncExpect(() => { wrapper.find('#open_two_drawer').trigger('click') }, 0) await asyncExpect(() => { const translateY = wrapper.find('.ant-drawer.test_drawer').element.parentElement.style.transform expect(translateY).toEqual('translateY(180px)') expect(wrapper.find('#two_drawer_text').exists()).toBe(true) }, 1000) }) })