浏览器模式
Rstest 提供了浏览器模式(Browser Mode),允许你在真实浏览器中运行测试,而不是使用 jsdom 或 happy-dom 等模拟环境。
什么是浏览器模式?
浏览器模式使用 Playwright 在真实浏览器(Chromium、Firefox 或 WebKit)中执行你的测试代码。这意味着你的测试将在与生产环境完全一致的浏览器 API 和行为下运行。
与 Node 模式一致,当有未处理的错误或 Promise rejection 从测试文件中逸出时,即使该文件中的所有测试都通过,浏览器模式也会将该文件判定为失败。如果某个 rejection 是预期的,请在测试内 await 该 Promise 或为其挂上处理函数,避免它逸出到页面。
Locator API
Browser Mode 现在支持 Playwright 风格的 Locator 工作流:你可以使用 page.getBy* 进行元素定位,再通过 expect.element(locator) 完成自动等待断言。
这种写法适合希望使用语义化定位(role/label/text)和链式断言的场景,让组件测试和 DOM 测试更接近真实用户交互语义。
详细用法见 浏览器交互。
何时使用浏览器模式
使用以下决策树来判断是否需要浏览器模式:
即使你的测试在 jsdom 中能正常运行,我们仍然推荐使用浏览器模式。具体优势见下方对比表。
浏览器模式 vs jsdom/happy-dom
浏览器模式与 jsdom/happy-dom 是两种不同的权衡:浏览器模式提供完整的浏览器兼容性和可视化调试,但会消耗更多资源;jsdom/happy-dom 运行更快、更轻量,但只能模拟部分浏览器 API。
配置兼容性
大部分配置项在浏览器模式下的行为与 Node 模式一致。下表集中列出了例外情况——被忽略的 node-only 配置(设置为非默认值时会触发一次性警告)、暂不支持的能力,以及调度语义不同的选项:
模块 mock(rs.mock 系列)与 includeSource 源码内测试的行为与 Node 模式一致。rs.mockRequire 在浏览器测试中同样可用,但它面向 CommonJS 互操作场景——编写浏览器测试时优先使用 rs.mock / rs.doMock。