diff --git a/packages/devui-vue/devui/tooltip/__tests__/tooltip.spec.ts b/packages/devui-vue/devui/tooltip/__tests__/tooltip.spec.ts new file mode 100644 index 0000000000..01a156c186 --- /dev/null +++ b/packages/devui-vue/devui/tooltip/__tests__/tooltip.spec.ts @@ -0,0 +1,163 @@ +import { mount } from '@vue/test-utils'; +import Tooltip from '../src/tooltip'; +import DButton from '../../button/src/button'; +import { Loading } from '../../loading/index' +import { nextTick } from 'vue'; + +let tooltipElement: HTMLElement; +const globalOption = { + directives: { + dLoading: Loading + } +} +const defaultslot = { + default: 'tooltip' +} + +describe('tooltip', () => { + beforeEach(() => { + jest.useFakeTimers(); + }) + describe('basic', () => { + it('should be create', async() => { + const wrapper = mount(Tooltip, { + props: { + content: 'content' + }, + slots: defaultslot, + global: globalOption + }) + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(wrapper.find('.tooltip').exists()).toBe(true); + expect(wrapper.find('.tooltipcontent').text()).toBe('content'); + await wrapper.findComponent(DButton).trigger('mouseenter'); + jest.advanceTimersByTime(150); + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(tooltipElement.style.opacity).toBe('1'); + await wrapper.findComponent(DButton).trigger('mouseleave'); + jest.advanceTimersByTime(150); + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(tooltipElement.style.opacity).toBe('0'); + }) + it('position should be left', async() => { + const wrapper = mount(Tooltip, { + props: { + content: 'content', + position: 'left' + }, + slots: defaultslot, + global: globalOption + }) + await nextTick(); + await wrapper.findComponent(DButton).trigger('mouseenter'); + jest.advanceTimersByTime(150); + await nextTick(); + const tooltipArrowElement = wrapper.element.querySelector('.arrow') as HTMLElement; + console.log(tooltipArrowElement.style); + expect(tooltipArrowElement.style.borderLeft).toBe('5px solid rgb(70, 77, 110)'); + }) + it('position should be top', async() => { + const wrapper = mount(Tooltip, { + props: { + content: 'content', + position: 'top' + }, + slots: defaultslot, + global: globalOption + }) + await nextTick(); + await wrapper.findComponent(DButton).trigger('mouseenter'); + jest.advanceTimersByTime(150); + await nextTick(); + const tooltipArrowElement = wrapper.element.querySelector('.arrow') as HTMLElement; + console.log(tooltipArrowElement.style); + expect(tooltipArrowElement.style.borderTop).toBe('5px solid rgb(70, 77, 110)'); + }) + it('position should be right', async() => { + const wrapper = mount(Tooltip, { + props: { + content: 'content', + position: 'right' + }, + slots: defaultslot, + global: globalOption + }) + await nextTick(); + await wrapper.findComponent(DButton).trigger('mouseenter'); + jest.advanceTimersByTime(150); + await nextTick(); + const tooltipArrowElement = wrapper.element.querySelector('.arrow') as HTMLElement; + console.log(tooltipArrowElement.style); + expect(tooltipArrowElement.style.borderRight).toBe('5px solid rgb(70, 77, 110)'); + }) + it('position should be bottom', async() => { + const wrapper = mount(Tooltip, { + props: { + content: 'content', + position: 'bottom' + }, + slots: defaultslot, + global: globalOption + }) + await nextTick(); + await wrapper.findComponent(DButton).trigger('mouseenter'); + jest.advanceTimersByTime(150); + await nextTick(); + const tooltipArrowElement = wrapper.element.querySelector('.arrow') as HTMLElement; + console.log(tooltipArrowElement.style); + expect(tooltipArrowElement.style.borderBottom).toBe('5px solid rgb(70, 77, 110)'); + }) + }) + describe('delay time', () => { + it('test mouseEnterDelay', async() => { + const wrapper = mount(Tooltip, { + props: { + content: 'content', + mouseEnterDelay: 500 + }, + slots: defaultslot, + global: globalOption + }) + await nextTick(); + await wrapper.findComponent(DButton).trigger('mouseenter'); + jest.advanceTimersByTime(200); + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(tooltipElement.style.opacity).toBe('0'); + jest.advanceTimersByTime(300); + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(tooltipElement.style.opacity).toBe('1'); + }) + it('test mouseLeaveDelay', async() => { + const wrapper = mount(Tooltip, { + props: { + content: 'content', + mouseLeaveDelay: 1000 + }, + slots: defaultslot, + global: globalOption + }) + await nextTick(); + await wrapper.findComponent(DButton).trigger('mouseenter'); + jest.advanceTimersByTime(150); + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(tooltipElement.style.opacity).toBe('1'); + await wrapper.findComponent(DButton).trigger('mouseleave'); + jest.advanceTimersByTime(500); + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(tooltipElement.style.opacity).toBe('1'); + jest.advanceTimersByTime(500); + await nextTick(); + tooltipElement = wrapper.element.querySelector('.tooltip') as HTMLElement; + expect(tooltipElement.style.opacity).toBe('0'); + }) + + }) + +}) \ No newline at end of file