import { asyncExpect } from '@/tests/utils' import { mount } from '@vue/test-utils' import Tooltip from '..' import Button from '../../button' describe('Tooltip', () => { it('check `onVisibleChange` arguments', async () => { const onVisibleChange = jest.fn() const wrapper = mount({ props: ['title', 'visible'], render () { const props = { props: { title: this.title || '', mouseEnterDelay: 0, mouseLeaveDelay: 0, }, on: { visibleChange: onVisibleChange, }, } if (this.visible !== undefined) { props.props.visible = this.visible } return
Hello world!
}, }, { sync: false }) let div = null let lastCount = null await asyncExpect(() => { // `title` is empty. div = wrapper.findAll('#hello').at(0) div.trigger('mouseenter') }) await asyncExpect(() => { expect(onVisibleChange).not.toHaveBeenCalled() expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) }) await asyncExpect(() => { div.trigger('mouseleave') }) await asyncExpect(() => { expect(onVisibleChange).not.toHaveBeenCalled() expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) }) await asyncExpect(() => { // update `title` value. wrapper.setProps({ title: 'Have a nice day!' }) }) await asyncExpect(() => { wrapper.findAll('#hello').at(0).trigger('mouseenter') }) await asyncExpect(() => { expect(onVisibleChange).toHaveBeenLastCalledWith(true) expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(true) }, 0) await asyncExpect(() => { wrapper.find('#hello').trigger('mouseleave') }) await asyncExpect(() => { expect(onVisibleChange).toHaveBeenLastCalledWith(false) expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) }) await asyncExpect(() => { // add `visible` props. wrapper.setProps({ visible: false }) }) await asyncExpect(() => { wrapper.find('#hello').trigger('mouseenter') }) await asyncExpect(() => { expect(onVisibleChange).toHaveBeenLastCalledWith(true) lastCount = onVisibleChange.mock.calls.length expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) }) await asyncExpect(() => { // always trigger onVisibleChange wrapper.trigger('mouseleave') }) await asyncExpect(() => { expect(onVisibleChange.mock.calls.length).toBe(lastCount) // no change with lastCount expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) }) await asyncExpect(() => { }) }) // it('should hide when mouse leave native disabled button', () => { // const onVisibleChange = jest.fn() // const wrapper = mount( // // // // ) // expect(wrapper.find('span')).toHaveLength(1) // const button = wrapper.find('span').at(0) // button.dispatchEvent(new MouseEvent('mouseenter')) // expect(onVisibleChange).toBeCalledWith(true) // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(true) // button.trigger('mouseleave') // expect(onVisibleChange).toBeCalledWith(false) // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) // }) // it('should hide when mouse leave antd disabled Button', () => { // const onVisibleChange = jest.fn() // const wrapper = mount( // // // // ) // expect(wrapper.render()).toMatchSnapshot() // const button = wrapper.find('span').at(0) // button.dispatchEvent(new MouseEvent('mouseenter')) // expect(onVisibleChange).toBeCalledWith(true) // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(true) // button.trigger('mouseleave') // expect(onVisibleChange).toBeCalledWith(false) // expect(wrapper.vm.$refs.tooltip.$refs.tooltip.visible).toBe(false) // }) // it('should render disabled Button style properly', () => { // const wrapper1 = mount( // // // // ) // const wrapper2 = mount( // // // // ) // expect(wrapper1.find('span').at(0).element.style.display).toBe('inline-block') // expect(wrapper2.find('span').at(0).element.style.display).toBe('block') // }) // it('should not wrap span when trigger is not hover', () => { // const wrapper = mount( // // // // ) // expect(wrapper.find('span')).toHaveLength(0) // }) // it('should works for arrowPointAtCenter', () => { // const arrowWidth = 5 // const horizontalArrowShift = 16 // const triggerWidth = 200 // const suit = () => { // const wrapper = mount( // // // // ) // wrapper.find('button').at(0).trigger('click') // const popupLeftDefault = parseInt(wrapper.instance().getPopupDomNode().style.left, 10) // const wrapper2 = mount( // // // // ) // wrapper2.find('button').at(0).trigger('click') // const popupLeftArrowPointAtCenter = parseInt(wrapper2.instance().getPopupDomNode().style.left, 10) // expect(popupLeftArrowPointAtCenter - popupLeftDefault).toBe((triggerWidth / 2) - horizontalArrowShift - arrowWidth) // } // jest.dontMock('rc-trigger', suit) // }) })