import { fireEvent, render, screen } from '@testing-library/react'; import { DiagnosticNotice } from './DiagnosticNotice'; import { WorkspaceOverlays } from './WorkspaceOverlays'; import { StatusBar } from './StatusBar'; describe('工作台反馈组件', () => { it('诊断详情可展开并关闭', () => { const close = vi.fn(); render( , ); expect(screen.queryByText('bad xml')).not.toBeInTheDocument(); fireEvent.click(screen.getByRole('button', { name: '技术详情' })); expect(screen.getByText('bad xml')).toBeVisible(); fireEvent.click(screen.getByRole('button', { name: '关闭错误' })); expect(close).toHaveBeenCalledTimes(1); }); it('加载态与空态互斥,并展示真实阶段进度', () => { const { rerender } = render(); expect(screen.getByText('拖放模型工程到此处')).toBeVisible(); rerender( , ); expect(screen.queryByText('拖放模型工程到此处')).not.toBeInTheDocument(); expect(screen.getByRole('status')).toHaveTextContent('正在导入工程'); expect(screen.getByRole('progressbar', { name: '读取工程文件' })).toHaveAttribute( 'aria-valuenow', '42', ); }); it('拖入文件时显示明确落点反馈', () => { render(); expect(screen.getByText('松开即可导入工程')).toBeVisible(); }); it('展示格式化状态数据', () => { render(); expect(screen.getByText(/时间 1.250 s/)).toBeVisible(); fireEvent.click(screen.getByRole('button', { name: /FPS 60/ })); expect(screen.getByRole('dialog', { name: '性能详情' })).toHaveTextContent('WASM已加载'); }); });