From 321d7a996ac244ed2ea3371812df2572cb83bbd2 Mon Sep 17 00:00:00 2001 From: jinjie0703 <171225151+jinjie0703@users.noreply.github.com> Date: Fri, 26 Jun 2026 19:26:26 +0800 Subject: [PATCH] test(tooltip): add unit tests for TooltipLite component --- .../tooltip/__tests__/tooltip-lite.test.tsx | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 packages/components/tooltip/__tests__/tooltip-lite.test.tsx diff --git a/packages/components/tooltip/__tests__/tooltip-lite.test.tsx b/packages/components/tooltip/__tests__/tooltip-lite.test.tsx new file mode 100644 index 0000000000..84b82d7703 --- /dev/null +++ b/packages/components/tooltip/__tests__/tooltip-lite.test.tsx @@ -0,0 +1,105 @@ +import React from 'react'; +import { act, fireEvent, render } from '@test/utils'; + +import TooltipLite from '../TooltipLite'; + +describe('TooltipLite 组件测试', () => { + const triggerText = '触发元素'; + const contentText = '气泡提示内容'; + + test('基础 hover 触发与内容渲染', async () => { + const { getByText, queryByText } = render( + + + , + ); + + // 初始状态下内容不存在 + expect(queryByText(contentText)).toBeNull(); + + // 模拟鼠标进入 + await act(async () => { + fireEvent.mouseEnter(getByText(triggerText)); + }); + + // 鼠标进入后内容出现 + const tipContent = queryByText(contentText); + expect(tipContent).not.toBeNull(); + expect(tipContent.closest('.t-tooltip')).toHaveClass('t-popup'); + + // 模拟鼠标离开 + await act(async () => { + fireEvent.mouseLeave(getByText(triggerText)); + }); + }); + + test('triggerElement prop 支持', async () => { + const { getByText, queryByText } = render( + {triggerText}} content={contentText} />, + ); + + await act(async () => { + fireEvent.mouseEnter(getByText(triggerText)); + }); + + expect(queryByText(contentText)).not.toBeNull(); + }); + + test('theme 与 showShadow 支持', async () => { + const { getByText, queryByText, rerender } = render( + + {triggerText} + , + ); + + await act(async () => { + fireEvent.mouseEnter(getByText(triggerText)); + }); + + const popupNode = queryByText(contentText)?.closest('.t-tooltip'); + expect(popupNode).toHaveClass('t-tooltip--light'); + expect(popupNode).toHaveClass('t-tooltip--noshadow'); + + // 切回 default 主题且显示阴影 + rerender( + + {triggerText} + , + ); + expect(popupNode).toHaveClass('t-tooltip--default'); + expect(popupNode).not.toHaveClass('t-tooltip--noshadow'); + }); + + test('showArrow 支持', async () => { + const { getByText } = render( + + {triggerText} + , + ); + + await act(async () => { + fireEvent.mouseEnter(getByText(triggerText)); + }); + + expect(document.querySelector('.t-popup__arrow')).not.toBeNull(); + }); + + test('placement: mouse 跟随定位支持', async () => { + const { getByText, queryByText } = render( + + {triggerText} + , + ); + + const triggerNode = getByText(triggerText); + + await act(async () => { + fireEvent.mouseMove(triggerNode, { clientX: 100, clientY: 100 }); + fireEvent.mouseEnter(triggerNode, { clientX: 100, clientY: 100 }); + }); + + const popupNode = queryByText(contentText)?.closest('.t-tooltip') as HTMLElement; + expect(popupNode).not.toBeNull(); + expect(popupNode.dataset.popperPlacement).toEqual('mouse'); + }); +});