用途:在 Effect 项目中编写可测试的服务与小型冒烟测试,让测试不依赖外部 IO、结果确定。
主要能力与用法:通过 Layer 注入 mock 服务,例如 const RepoTest = Layer.succeed(Repo, Repo.of({ find: () => Effect.succeed(mock) }));再用 const result = yield* Effect.provide(program, RepoTest) 提供测试实现。确定性时间可用平台提供的 TestClock layer(资料未给出具体调用示例)。
指导原则:保持测试聚焦、快速,通过 mock 服务避免网络;显式提供 layer 以匹配程序需求;测试贴近真实接口,不要为测试改造应用代码;可用 .Default layer 快速接线,再按测试添加自定义 mock layer;优先编写运行快、失败早的小型冒烟测试。
常见陷阱:真实 IO 泄漏进测试会导致不稳定;过度 mock 内部实现会使测试脆弱,应在服务边界 mock。
本地源码参考:实现前应先在 docs/effect-source/ 搜索实际源码。关键文件包括 Layer.ts、TestClock.ts、TestContext.ts。示例搜索命令:grep -F "Layer.succeed" docs/effect-source/effect/src/Layer.ts;grep -F "TestClock" docs/effect-source/effect/src/TestClock.ts;grep -F "TestContext" docs/effect-source/effect/src/TestContext.ts;grep -F "Layer.succeed" docs/effect-source/effect/test/Layer.test.ts。流程为:确定所需测试 API,搜索 Layer.ts 实现,研究类型与测试模式,参考测试文件用法,再基于真实实现编写代码;真实源码优先于文档和假设。资料还给出构建综合 Test layer 的真实片段,组合 tempy 临时目录、NodeOs、NodeProcess、ToolkitsRepo 等 mock 与 BunFileSystem、MockTerminal 等 layer。
适用场景:需要确定性、快速、无外部依赖的 Effect 服务测试。限制:资料未说明收费、平台支持等细节;具体 API 行为以本地源码为准。