diff --git a/packages/components/popover/__tests__/popover.spec.ts b/packages/components/popover/__tests__/popover.spec.ts index ba6172f814..305b1f38e0 100644 --- a/packages/components/popover/__tests__/popover.spec.ts +++ b/packages/components/popover/__tests__/popover.spec.ts @@ -1,10 +1,12 @@ -import { h } from 'vue' +import { h, nextTick } from 'vue' import { PopupManager } from '@element-plus/utils/popup-manager' import makeMount from '@element-plus/test-utils/make-mount' +import { rAF } from '@element-plus/test-utils/tick' +import { ElPopperTrigger } from '@element-plus/components/popper' import Popover from '../src/index.vue' const AXIOM = 'Rem is the best girl' - +jest.useFakeTimers() const mount = makeMount(Popover, { slots: { default: () => AXIOM, @@ -103,4 +105,24 @@ describe('Popover.vue', () => { const vm = wrapper.vm as any expect(vm.hide).toBeDefined() }) + + test('should be able to emit after-enter and after-leave', async () => { + const wrapper = mount({ + attrs: { + trigger: 'click', + }, + }) + await nextTick() + const trigger$ = wrapper.findComponent(ElPopperTrigger) + const triggerEl = trigger$.find('.el-tooltip__trigger') + await triggerEl.trigger('click') + jest.runAllTimers() + await rAF() + expect(wrapper.emitted()).toHaveProperty('after-enter') + + await triggerEl.trigger('click') + jest.runAllTimers() + await rAF() + expect(wrapper.emitted()).toHaveProperty('after-leave') + }) }) diff --git a/packages/components/popover/src/index.vue b/packages/components/popover/src/index.vue index fada627a56..0fbe0b378b 100644 --- a/packages/components/popover/src/index.vue +++ b/packages/components/popover/src/index.vue @@ -8,6 +8,8 @@ :popper-class="kls" :popper-style="style" persistent + @show="afterEnter" + @hide="afterLeave" >