> For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt.

# 功能导航

Rstest 是基于 Rsbuild 和 Rspack 的 JavaScript 与 TypeScript 测试框架，采用 bundle 执行模型，利用 Rspack 基于 Rust 的构建流程和 SWC 转换加快测试编译。你可以复用构建配置，在 Node.js 或浏览器中测试代码，并使用同一个 runner 完成本地开发和 CI 中的测试。

## 基于 bundle 的快速执行 \{#fast-bundle-based-execution}

Rstest 使用 Rspack 根据依赖图打包测试，通过其内置的 SWC loader 转换 JavaScript 和 TypeScript，将构建期优化直接用于测试。

[lazyBarrel](https://rspack.rs/zh/guide/advanced/lazy-barrel) 等优化会跳过无副作用 barrel 文件中未使用的重导出，减少不必要的模块处理，加快依赖图复杂的大型项目的测试。

## 复用现有构建配置 \{#reuse-existing-build-setup}

通过 [adapters](/zh/guide/advanced/adapters.md) 复用已有的 Rsbuild、Rslib 或 Rspack 配置，包括别名、代码转换和插件，减少重复配置，让测试与应用或库的构建配置保持一致。

参阅 [配置 Rstest](/zh/guide/basic/configure-rstest.md) 和 [配置 SWC](/zh/guide/basic/configure-rstest.md#配置-swc)。

## 在 Node.js 和浏览器中测试 \{#test-in-nodejs-and-browsers}

默认在 Node.js 环境中运行测试，也可以模拟 DOM 来测试组件，或使用真实浏览器验证浏览器行为。

### DOM 测试 \{#dom-testing}

Rstest 可以通过 jsdom 或 happy-dom 模拟 DOM 与浏览器 API。它支持 React、Vue 等常见框架测试流程，并兼容 Testing Library 和 CSS Modules。

了解更多关于 [DOM 测试](/zh/config/test/test-environment.md#dom-测试)。

### 浏览器模式（Browser Mode） \{#browser-mode}

Rstest 提供 Browser Mode，适用于需要真实浏览器、而不是 jsdom 或 happy-dom 这类模拟环境的测试。它可以帮助你验证浏览器 API、渲染行为，以及 DOM 模拟器难以覆盖的交互。

Browser Mode 基于 [Playwright](https://playwright.dev/) 运行，可在 Chromium、Firefox 和 WebKit 中执行测试，适合跨浏览器验证。

了解更多关于 [浏览器模式](/zh/guide/browser-testing.md)。

### Playwright 驱动的 E2E 测试 \{#playwright-driven-e2e-tests}

Rstest 可以通过 [@rstest/playwright](https://github.com/web-infra-dev/rstest/tree/main/packages/playwright) 对完整页面或应用运行 E2E 测试。测试会在 Node.js worker 中运行，并使用 Playwright 驱动本地 dev server、preview server 或线上 URL，同时与其他测试共享 Rstest runner、配置和报告工作流。

了解更多关于 [E2E 测试](/zh/guide/basic/e2e-testing.md)。

### 测试模块联邦应用 \{#test-module-federation-applications}

Rstest 可以在 Node、JSDOM 和 Browser Mode 测试中加载真实的[模块联邦](https://module-federation.io/)生产者。配合 [@module-federation/rstest](https://github.com/module-federation/core)，测试会实际覆盖远程模块加载和共享依赖，而不是使用 mock 替换联邦边界。

了解更多关于 [模块联邦测试](/zh/guide/advanced/module-federation.md)。

## 加快测试反馈 \{#get-faster-feedback}

### Watch 模式 \{#watch-mode}

当你修改测试文件或其依赖模块时，Rstest 会基于模块图分析，仅重新运行受影响的测试文件。随着测试规模增长，这可以让本地反馈保持快速。

### VM 模式 \{#vm-mode}


[Added in v0.12.0](https://github.com/web-infra-dev/rstest/releases/tag/v0.12.0)

如果 worker 启动和依赖编译占用了较多测试时间，可以尝试 VM 模式提供的 `vmForks` 和 `vmThreads` pool。它们会复用子进程或 worker 线程，同时为每个测试文件创建独立的 `vm.Context`、模块图和测试环境。

VM pool 可以减少重复启动和编译的开销，但 setup 文件和模块求值仍会在每个文件中执行，VM context 也不会隔离进程级状态。建议先使用默认的 `forks` pool，切换前确认 VM 的兼容性限制。

参阅 [选择 pool](/zh/config/test/pool.md)，了解配置方式、内存回收和兼容性要求。

### 源码内联测试 \{#in-source-tests}

Rstest 支持类 [Rust 的模块测试](https://doc.rust-lang.org/book/ch11-03-test-organization.html#the-tests-module-and-cfgtest)风格，可以在源码文件中直接编写测试块。对于小型工具函数和 helper，将快速检查放在实现旁边会让开发更顺手。

了解更多关于 [源码内联测试](/zh/config/test/include-source.md)。

## 在 CI 中扩展测试规模 \{#scale-test-runs-in-ci}

### 多项目测试 \{#multi-project-testing}

Rstest 可以在同一个进程中运行多个测试项目，每个项目都可以保留自己的配置和环境。这适合 monorepo、多应用工作区，以及需要分别覆盖 Node、DOM 或 Browser Mode 的项目。

了解更多关于 [多项目测试](/zh/guide/basic/projects.md)。

### 测试分片（Sharding） \{#test-sharding}

Rstest 可以将测试文件拆分为多个分片并行执行。你可以在 CI 中把同一套测试分发到多台机器以缩短总耗时，并在所有分片完成后通过 `blob` 报告器与 `rstest merge-reports` 合并测试结果和代码覆盖率。

了解更多关于 [测试分片](/zh/guide/basic/cli.md#sharding-tests)。

### 代码覆盖率 \{#code-coverage}

使用 `istanbul` 或 `v8` provider 收集代码覆盖率、生成报告，并在 CI 中检查覆盖率阈值。Browser Mode 也支持收集覆盖率，可用的 provider 取决于浏览器和运行模式。

参阅 [代码覆盖率](/zh/config/test/coverage.md)，了解 provider 选择和配置方式。

## 更多能力 \{#more-capabilities}

- [与 Jest 兼容的断言](/zh/api/runtime-api/test-api/expect.md)和[快照测试](/zh/guide/basic/snapshot.md)
- [Mock 和 spy 工具](/zh/guide/basic/mock.md)
- [文件级隔离](/zh/config/test/isolate.md)
- [用于 setup 和 teardown 的生命周期钩子](/zh/api/runtime-api/test-api/hooks.md)
- [内置报告器和 CI 输出](/zh/guide/basic/reporters.md)
- [按目录、项目、文件或测试名过滤](/zh/guide/basic/test-filter.md)
- [VS Code 插件](/zh/guide/basic/vscode-extension.md)
