用途:本技能为 Aspire Dashboard 提供编写测试的模式与实践,适用于创建、修改或调试仪表板单元测试与 Blazor 组件测试的场景。
测试项目选择:根据被测代码是否使用 Blazor 类型分两个项目。Aspire.Dashboard.Tests(tests/Aspire.Dashboard.Tests/)用于测试不使用 Blazor 类型的代码,如模型、辅助类、工具、OTLP 服务、中间件;Aspire.Dashboard.Components.Tests(tests/Aspire.Dashboard.Components.Tests/)用于测试使用 Blazor 类型的代码,如页面、组件、控件,使用 bUnit 进行内存渲染。
源码对应关系:src/Aspire.Dashboard/ 下 Components/ 对应 Components.Tests,Model/、Otlp/、Utils/ 对应 Dashboard.Tests。
主要能力:非 Blazor 项目使用标准 xUnit 测试,直接构造与断言,用 [Fact] 与 [Theory]/[InlineData],用 ModelTestHelpers.CreateResource(...) 构建 ResourceViewModel,用手写假对象而非模拟框架。Blazor 项目基于 bUnit,在浏览器外渲染组件;所有 bUnit 组件测试需继承 DashboardTestContext,其将 DefaultWaitTimeout 从默认 1 秒提高到 10 秒以适应较慢的 CI。渲染用 RenderComponent<...>,断言通过查询渲染后的 DOM。
共享设置:Dashboard 服务需要大量 DI 设置(遥测、存储、本地化、FluentUI JS 互操作 mock 等),应复用 Shared/ 下的辅助方法而不重复注册。常用有 FluentUISetupHelpers.AddCommonDashboardServices()、SetupFluentUIComponents()、SetupDialogInfrastructure()、各 FluentUI 组件的 JS mock 方法,以及 ResourceSetupHelpers、MetricsSetupHelpers、StructuredLogsSetupHelpers、IntegrationTestHelpers 等。新测试区域应新增专用设置辅助方法。
测试约定:对文化敏感组件测试使用 [UseCulture("en-US")];复用共享设置方法而非复制 DI 注册;异步状态变化使用 WaitForAssertion;用 Channel 模拟实时数据更新;响应式组件需提供 ViewportInformation。
共享假对象:TestDashboardClient 可配置资源、控制台日志、交互与命令的通道;还有 TestDialogService、TestSessionStorage、TestStringLocalizer、TestDashboardTelemetrySender 等。
库存/基线仪表板验证:当验证已安装或已发布仪表板而非仓库本地版本时使用。若 AppHost 已含本地项目,仅运行已安装 CLI 不够;用 SkipDashboardProjectReference=true 退出共享引用,并将 AspireDashboardPath 指向已安装捆绑包。运行 aspire doctor --format json --non-interactive,取第一个安装行,用 canonicalPath 与 route 定位捆绑根目录;若 canonicalPath 缺失应停止而非猜测。安装路由与捆绑根目录对应关系:script、pr、localhive 取 canonicalPath 所在目录的父目录;winget、brew、dotnet-tool 取 canonicalPath 所在目录;nix、other 或无 sidecar 时用 ASPIRE_HOME,未设置则用 ~/.aspire。相关命令按原文保留。验证时需确认仪表板资源的解析可执行路径等于该路径且来源为 aspire-managed,而非 Aspire.Dashboard.csproj。
限制:资料未说明该技能的收费、价格、平台支持与效果等信息。