DirectSurface UIDirectSurface UI
开始使用
文档/开始使用

业务应用测试与调试

组件库本身的测试不能替代业务应用验证。消费端至少应覆盖应用能否挂载、页面组合是否正确、关键状态是否联动,以及复杂页面在真实浏览器中的交互和性能。

建议测试层次

层次 验证目标 推荐方式
纯业务状态 查询条件、校验、权限、命令状态 普通 TypeScript 单元测试
Render Tree 组合 页面是否创建正确组件与层级 Vitest,直接实例化页面或页面工厂
应用生命周期 Canvas 挂载、首帧、释放、重复进入 jsdom 或浏览器测试
关键交互 点击、键盘、焦点、弹窗、编辑 浏览器自动化测试
视觉与性能 布局、主题、虚拟滚动、帧耗时 固定视口截图与 runtime 诊断

页面工厂测试

把业务页面构建集中在工厂或类中,测试不需要启动整个站点。

import { describe, expect, it } from 'vitest'
import { RenderPage, RenderText } from 'ds-ui'

function createGreetingPage(name: string): RenderPage {
  return new RenderPage({ child: new RenderText(`你好,${name}`) })
}

describe('greeting page', () => {
  it('creates a page for the current user', () => {
    expect(createGreetingPage('Alice')).toBeInstanceOf(RenderPage)
  })
})

业务断言应优先检查状态、命令和公开行为,不要依赖内部私有字段或绘制调用次数。

应用级冒烟测试

挂载测试需要提供有尺寸的 Canvas,并在每个用例结束后释放 AppHost。如果测试环境不实现 Canvas 2D,应使用浏览器测试,或安装项目统一的 Canvas mock;不要在每个用例里各写一套不一致的假实现。

重点覆盖:

  1. 宿主存在时可以完成 Application.mount(...).run(...)
  2. 宿主缺失或类型错误时给出明确错误。
  3. dispose() 后事件监听、浮层和调度停止。
  4. 同一路由反复进入退出不会产生重复事件。
  5. 字体加载失败或页面数据失败时仍有可诊断状态。

调试顺序

出现空白、错位或卡顿时按下面顺序定位:

  1. 检查 Canvas CSS 宽高是否非零。
  2. 检查主窗口是否已经接入页面子节点。
  3. 检查是否过早调用 dispose(),或存在旧 host 未释放。
  4. 开启 Layout Inspector 查看约束与最终尺寸。
  5. 开启 Performance Overlay 判断耗时发生在 layout、paint 还是 composite。
  6. 对 DataGrid、TreeGrid 等大数据控件确认是否启用虚拟化,并避免每次输入重建全量数据。

业务项目构建校验

业务项目应在持续集成中至少执行类型检查、生产构建和关键页面烟雾测试。校验时只依赖实际安装的 ds-ui 制品,这样可以及时发现版本升级后公共导出、主题资源或运行时行为的变化。

继续阅读运行时诊断DevTools性能总览