58 lines
2.2 KiB
TypeScript
58 lines
2.2 KiB
TypeScript
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(
|
|
<DiagnosticNotice
|
|
value={{
|
|
category: '模型编译',
|
|
summary: '模型编译失败',
|
|
detail: 'bad xml',
|
|
path: 'robot.xml',
|
|
at: 1,
|
|
}}
|
|
onClose={close}
|
|
/>,
|
|
);
|
|
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(<WorkspaceOverlays loading={false} hasSnapshot={false} />);
|
|
expect(screen.getByText('拖放模型工程到此处')).toBeVisible();
|
|
rerender(
|
|
<WorkspaceOverlays
|
|
loading
|
|
hasSnapshot={false}
|
|
progress={{
|
|
title: '正在导入工程',
|
|
label: '读取工程文件',
|
|
detail: 'robot.zip',
|
|
value: 0.42,
|
|
}}
|
|
/>,
|
|
);
|
|
expect(screen.queryByText('拖放模型工程到此处')).not.toBeInTheDocument();
|
|
expect(screen.getByRole('status')).toHaveTextContent('正在导入工程');
|
|
expect(screen.getByRole('progressbar', { name: '读取工程文件' })).toHaveAttribute(
|
|
'aria-valuenow',
|
|
'42',
|
|
);
|
|
});
|
|
it('拖入文件时显示明确落点反馈', () => {
|
|
render(<WorkspaceOverlays loading={false} hasSnapshot={false} dragActive />);
|
|
expect(screen.getByText('松开即可导入工程')).toBeVisible();
|
|
});
|
|
it('展示格式化状态数据', () => {
|
|
render(<StatusBar time={1.25} fps={60} stepMs={0.5} memoryMb={10} loaded overBudget={false} />);
|
|
expect(screen.getByText(/时间 1.250 s/)).toBeVisible();
|
|
expect(screen.getByText(/WASM 已加载/)).toBeVisible();
|
|
});
|
|
});
|