import { nextTick, ref } from 'vue' import { shallowMount } from '@vue/test-utils' import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { POPPER_CONTENT_INJECTION_KEY } from '@element-plus/tokens' import ElArrow from '../src/arrow.vue' import type { VueWrapper } from '@vue/test-utils' const popperContentInjection = { arrowRef: ref(null), arrowOffset: ref(0), } const mountArrow = () => shallowMount(ElArrow, { global: { provide: { [POPPER_CONTENT_INJECTION_KEY as symbol]: popperContentInjection, }, }, }) describe('', () => { let wrapper: VueWrapper> beforeEach(() => { wrapper = mountArrow() return nextTick() }) afterEach(() => { wrapper?.unmount() popperContentInjection.arrowRef.value = null popperContentInjection.arrowOffset.value = 0 }) it('should set the arrowRef after mounted', async () => { expect(popperContentInjection.arrowRef.value).toBe(wrapper.vm.arrowRef) expect(popperContentInjection.arrowOffset.value).toBe(0) }) it('should update the offset after props changed', async () => { expect(popperContentInjection.arrowOffset.value).toBe(0) await wrapper.setProps({ arrowOffset: 10, }) expect(popperContentInjection.arrowOffset.value).toBe(10) }) it('should unset arrowRef before unmount', async () => { expect(popperContentInjection.arrowRef.value).toBe(wrapper.vm.arrowRef) wrapper.unmount() expect(popperContentInjection.arrowRef.value).toBeNull() }) })