了解 Workers Vitest 集成如何运行测试、如何在测试之间隔离,以及如何导入模块。
使用 Workers Vitest 集成运行测试时,Vitest 将:
- 使用 Node.js 读取并评估配置文件。
- 使用 Node.js 运行任何
globalSetup↗ 文件。 - 收集并排序测试文件。
- 对于每个 Vitest 项目,根据其配置的隔离和并发设置,启动一个或多个
workerd↗ 进程,每个进程运行一个或多个 Worker。 - 在
workerd中使用相应的 Worker 运行setupFiles↗ 和测试文件。 - 监听变更并在配置未更改时使用相同的 Worker 重新运行测试文件。
存储隔离按测试文件进行。每个测试文件拥有独立的存储环境,测试文件期间对存储的写入对其他测试文件不可见。Workers Vitest 集成在可能的情况下会在测试运行之间复用 Worker 及其模块缓存。每个 workerd 进程中都存在所有辅助 workers 的副本。
默认情况下,测试文件并发运行。若要让测试文件共享同一存储(例如,依赖共享状态的集成测试),请使用 Vitest 标志 --max-workers=1 --no-isolate。
每个 Worker 拥有独立的模块缓存。由于 Worker 在测试运行之间被复用,其模块缓存也会被复用。Vitest 会根据变更的文件,在每次测试运行开始时使模块缓存的部分内容失效。
Workers Vitest pool 通过在 Cloudflare Worker 内运行代码来实现,而 Vitest 通常会在 Node.js Worker 线程 ↗ 中运行这些代码。为此,pool 会自动注入 nodejs_compat、[no_nodejs_compat_v2] 和 export_commonjs_default 兼容性标志。这是仍能让 Vitest 正确运行的最小兼容性设置,同时不会引入不必要的 polyfill 和全局变量。如果配置中已定义 Node.js 兼容性标志,Vitest Pool Workers 将不会尝试添加这些标志。