用途:在测试中为 Fusion Framework 模块提供确定性的模拟状态,例如已登录用户、当前上下文、功能开关/书签、伪造 HTTP 响应,无需真实 Entra ID 租户、服务注册表或后端。适用于测试 useAccessToken、登录/登出行为、服务发现、断言中间件调用,以及编写 *.mock.ts 或 mock-configurator 文件。
主要能力:只替换执行网络 I/O 的客户端,provider、configurator、schema 校验和模块 initialize 仍真实运行,因此仍能发现接线错误。模拟代码位于被替换模块自身的 /mock 入口;@equinor/fusion-framework/mock 仅组合内置集合,本身不含模拟逻辑。没有针对单次调用的 Fusion 模拟 API,客户端是普通类,可用 vi.spyOn、bun:test 的 spyOn 或 Node 的 t.mock.method。
使用方式:按测试范围选择层级——父框架/门户级模块用 mockFramework(@equinor/fusion-framework/mock);应用自身模块(无 React)用 mockAppModules(@equinor/fusion-framework-app/mock);自定义模块图用该模块的 enableMock(@equinor/fusion-framework-module-/mock)。示例:import { mockFramework } from '@equinor/fusion-framework/mock'; const fusion = await mockFramework((configurator) => { configurator.msal.setAccount({ name: 'Ada Lovelace' }); configurator.context.setCurrentContext({ id: 'project-a', type: { id: 'ProjectMaster' }, value: {} }); configurator.serviceDiscovery.addService({ key: 'catalog' }); });。HTTP 伪造可选手写 configurator.http.addMiddleware、createRouterMiddleware 或多路由,或 createOpenApiMockMiddleware(基于 @equinor/fusion-openapi-mock)。未匹配请求会落到 next(uri, init) 并最终访问真实网络,完全离线测试需为每个预期请求提供应答中间件。自定义模块可参考 client seam(setClient)、builder 配置及通过 FrameworkMockConfigurator 的 _pin/_getConfig 暴露访问器。
适用场景:需要确定性模块状态、离线启动应用、测试登录/登出、伪造 HTTP 端点、模拟服务发现、为自有模块添加 mock。
限制:不用于渲染组件/hook 或配置 Vitest/Browser Mode(应使用 fusion-framework-testing);不用于 dev-server.config.ts 的本地 API 模拟/代理;不用于单次调用断言(属测试运行器职责);不用于后端/服务仓库测试替身。不要发明 Fusion 专用调用断言 API,不要将未签名 mock JWT 视为测试外有效,不要整体替换 provider/configurator,未声明框架启动时解析的所有服务前不要假设 setResolveUnknownServices(false) 安全。