通过Vitest和workerd改进Cloudflare Workers测试

💡 原文英文,约3300词,阅读约需12分钟。
📝

内容提要

Cloudflare与Workers Vitest集成,允许开发人员为Cloudflare Workers编写单元和集成测试。集成包括快照、模拟、定时器和间谍等功能,以及热模块重载和每个测试独立存储等开发者体验改进。文章提供了使用Vitest测试Workers的入门指南。

🔎

延伸解读

测试环境与生产环境的一致性

Workers Vitest 集成让测试直接在 workerd 运行时中执行,与生产环境相同。这减少了因环境差异导致的测试通过但线上失败的风险,尤其对于依赖 Workers 特有 API 或行为的代码,测试结果更具参考价值。

集成测试与单元测试的适用场景

单元测试适合验证 Worker 导出的函数逻辑,而集成测试通过 SELF.fetch() 发送 HTTP 请求,能覆盖路由、中间件及多个 Workers 交互等完整流程。开发者应根据测试目标选择,单元测试快速反馈,集成测试提供更高置信度。

存储隔离与测试独立性

默认启用的 per-test isolated storage 会在每个测试结束后自动回滚对 KV、R2、D1 等存储的写入,确保测试可独立运行且互不干扰。这避免了手动清理数据的繁琐,但需注意在 beforeAll 中写入的数据会被保留,适合作为测试种子。

请求模拟与 Durable Objects 测试

通过 fetchMock 可以声明式地模拟外部请求的响应,并强制所有出站请求必须被模拟,防止意外网络调用。同时,runInDurableObject 允许直接访问 Durable Object 的实例方法和状态,但仅适用于同一 Worker 内的 Durable Objects,辅助 Worker 中的无法直接测试。

❓

Q&A

Cloudflare Workers Vitest集成的主要功能是什么?

Cloudflare Workers Vitest集成允许开发人员编写单元和集成测试,支持快照、模拟、定时器和间谍等功能,提升开发者体验。

如何开始使用Vitest测试Cloudflare Workers?

可以通过create-cloudflare工具快速开始,运行命令npm create cloudflare@latest hello-world -- --type=hello-world即可创建项目。

手动安装Workers Vitest集成需要哪些步骤?

手动安装需要安装@cloudflare/vitest-pool-workers,并配置相关文件,如tsconfig.json和vitest.config.js。

集成测试与单元测试有什么区别?

集成测试评估多个功能单元的工作流程,而单元测试则测试单个功能的返回值,集成测试通常更复杂。

如何在测试中模拟外部请求?

可以使用cloudflare:test模块中的fetchMock来模拟请求,确保测试时不会发出真实的网络请求。

Workers Vitest集成如何确保测试的隔离性?

集成使用Durable Objects作为测试运行器,确保每个测试的存储是独立的,避免测试之间的干扰。

🏷️

标签

➡️

继续阅读