功能导航
Rstest 是基于 Rsbuild 和 Rspack 的 JavaScript 与 TypeScript 测试框架,采用 bundle 执行模型,利用 Rspack 基于 Rust 的构建流程和 SWC 转换加快测试编译。你可以复用构建配置,在 Node.js 或浏览器中测试代码,并使用同一个 runner 完成本地开发和 CI 中的测试。
基于 bundle 的快速执行
Rstest 使用 Rspack 根据依赖图打包测试,通过其内置的 SWC loader 转换 JavaScript 和 TypeScript,将构建期优化直接用于测试。
lazyBarrel 等优化会跳过无副作用 barrel 文件中未使用的重导出,减少不必要的模块处理,加快依赖图复杂的大型项目的测试。
复用现有构建配置
通过 adapters 复用已有的 Rsbuild、Rslib 或 Rspack 配置,包括别名、代码转换和插件,减少重复配置,让测试与应用或库的构建配置保持一致。
在 Node.js 和浏览器中测试
默认在 Node.js 环境中运行测试,也可以模拟 DOM 来测试组件,或使用真实浏览器验证浏览器行为。
DOM 测试
Rstest 可以通过 jsdom 或 happy-dom 模拟 DOM 与浏览器 API。它支持 React、Vue 等常见框架测试流程,并兼容 Testing Library 和 CSS Modules。
了解更多关于 DOM 测试。
浏览器模式(Browser Mode)
Rstest 提供 Browser Mode,适用于需要真实浏览器、而不是 jsdom 或 happy-dom 这类模拟环境的测试。它可以帮助你验证浏览器 API、渲染行为,以及 DOM 模拟器难以覆盖的交互。
Browser Mode 基于 Playwright 运行,可在 Chromium、Firefox 和 WebKit 中执行测试,适合跨浏览器验证。
了解更多关于 浏览器模式。
Playwright 驱动的 E2E 测试
Rstest 可以通过 @rstest/playwright 对完整页面或应用运行 E2E 测试。测试会在 Node.js worker 中运行,并使用 Playwright 驱动本地 dev server、preview server 或线上 URL,同时与其他测试共享 Rstest runner、配置和报告工作流。
了解更多关于 Playwright。
测试 Module Federation 应用
Rstest 可以在 Node、JSDOM 和 Browser Mode 测试中加载真实的 Module Federation remote。配合 @module-federation/rstest,测试会实际覆盖 remote 加载和共享依赖,而不是使用 mock 替换 federation 边界。
了解更多关于 Module Federation 测试。
加快测试反馈
Watch 模式
当你修改测试文件或其依赖模块时,Rstest 会基于模块图分析,仅重新运行受影响的测试文件。随着测试规模增长,这可以让本地反馈保持快速。
VM 模式
如果 worker 启动和依赖编译占用了较多测试时间,可以尝试 VM 模式提供的 vmForks 和 vmThreads pool。它们会复用子进程或 worker 线程,同时为每个测试文件创建独立的 vm.Context、模块图和测试环境。
VM pool 可以减少重复启动和编译的开销,但 setup 文件和模块求值仍会在每个文件中执行,VM context 也不会隔离进程级状态。建议先使用默认的 forks pool,切换前确认 VM 的兼容性限制。
参阅 选择 pool,了解配置方式、内存回收和兼容性要求。
源码内联测试
Rstest 支持类 Rust 的模块测试风格,可以在源码文件中直接编写测试块。对于小型工具函数和 helper,将快速检查放在实现旁边会让开发更顺手。
了解更多关于 源码内联测试。
在 CI 中扩展测试规模
多项目测试
Rstest 可以在同一个进程中运行多个测试项目,每个项目都可以保留自己的配置和环境。这适合 monorepo、多应用工作区,以及需要分别覆盖 Node、DOM 或 Browser Mode 的项目。
了解更多关于 多项目测试。
测试分片(Sharding)
Rstest 可以将测试文件拆分为多个分片并行执行。你可以在 CI 中把同一套测试分发到多台机器以缩短总耗时,并在所有分片完成后通过 blob 报告器与 rstest merge-reports 合并测试结果和代码覆盖率。
了解更多关于 测试分片。
代码覆盖率
使用 istanbul 或 v8 provider 收集代码覆盖率、生成报告,并在 CI 中检查覆盖率阈值。Browser Mode 也支持收集覆盖率,可用的 provider 取决于浏览器和运行模式。
参阅 代码覆盖率,了解 provider 选择和配置方式。