用途。Component Fixtures 用于将 UI 组件单独渲染,以便通过 Component Explorer 进行视觉截图测试,并指导设计易于编写夹具的组件。夹具文件放在 src/vs/workbench/test/browser/componentFixtures/,由 Vite 开发服务器按 glob src/**/*.fixture.ts 自动发现。
主要能力。每个夹具文件默认导出一个 defineThemedFixtureGroup(...),必须放在以 .fixture.ts 结尾的文件中。defineComponentFixture 封装渲染函数,自动生成 Dark 与 Light 两个主题变体,并负责主题设置、异步就绪与可释放资源管理。createEditorServices 提供预注册基础编辑器服务的 TestInstantiationService。还可通过 additionalServices 注册额外服务,用 mock<T>() 创建 mock,用 registerWorkbenchServices、createTextModel、setupTheme、darkTheme/lightTheme 等工具。文件图标主题默认 Seti,可按夹具改为 vs-minimal 或 none。
使用方式。先启动 Component Explorer Server 任务,再用 mcp_component-exp_list_fixtures 列出全部夹具及其 URL,用 mcp_component-exp_screenshot 程序化截图;若看不到这些工具应提醒用户启用。重要限制:只有 fixtureUtils.ts 可以 import @vscode/component-explorer,所有夹具须经由 fixtureUtils.ts 中的辅助函数。不要为夹具或夹具基础设施添加自动化测试(含夹具专用单元测试、Playwright 与截图稳定性测试),应使用现有组件浏览器渲染、截图、稳定性和错误工具验证。
异步与限制。组件浏览器会等待渲染 promise 和两个动画帧,但这对图片解码、原生 resize observer、延迟布局或滚动条空闲计时器不构成就绪保证,需用有界、基于条件的等待,避免固定 sleep。跨 DOM 父级移动已渲染组件会造成闪烁,应从一开始就建立正确 DOM 结构。夹具共享文档与工作台样式表(isolation: 'none'),DOM、CSS 与进程级注册不会自动隔离。组件如依赖深层祖先选择器,需在夹具中重建所需祖先结构。
编写夹具友好的组件。建议构造器接受容器或暴露 domNode,所有服务经依赖注入,CSS 选择器保持浅层、自包含,构造时避免读取布局/窗口服务,并提供禁用自动聚焦等选项;当编写夹具暴露摩擦时应改组件本身而非绕过。测试专用操作应放在 test/ 下的测试子类中,避免加入生产 API。