Skip to content
Vitest 3
Main Navigation 指南 & API配置浏览器模式高级 API
3.2.0
2.1.9
1.6.1
0.34.6

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

主题

Sidebar Navigation

简介

为什么选择 Vitest

快速入门

特性

配置 Vitest

API

测试 API 参考

模拟函数

Vi

expect

expectTypeOf

assert

assertType

指南

命令行界面

测试过滤

测试项目

报告器

覆盖率

快照

模拟

并行

类型测试

Vitest UI

源内测试

测试上下文

测试注解

测试环境

扩展匹配器

IDE 集成

调试

常见错误

迁移指南

迁移到 Vitest 3.0

从 Jest 迁移

性能

分析测试性能

性能优化

浏览器模式

高级 API

与其他测试运行器的比较

页面导航

与其他测试运行器的比较 ​

Jest ​

Jest 凭借其对大多数 JavaScript 项目的开箱即用支持、友好的 API(it 和 expect)以及涵盖快照、模拟、覆盖率等测试功能的完整包,在测试框架领域占据主导地位。我们感谢 Jest 团队和社区创建了令人愉悦的测试 API,并推动了许多现已成为 Web 生态系统标准的测试模式。

Jest 可以在 Vite 项目中使用。@sodatea 构建了 vite-jest,旨在为 Jest 提供一流的 Vite 集成。Jest 中最后的集成障碍已经解决,因此它是您进行单元测试的有效选择。

然而,在 Vite 已经能够为大多数常见 Web 工具(TypeScript、JSX、最流行的 UI 框架)提供支持的背景下,Jest 可能会引入不必要的复杂性。如果您的应用程序由 Vite 提供支持,那么配置和维护两个不同的构建和测试管道是不必要的。使用 Vitest,您可以将开发、构建和测试环境的配置统一到一个管道中,共享相同的插件和 vite.config.js 配置。

即使您的库没有使用 Vite(例如,如果它使用 esbuild 或 Rollup 构建),Vitest 也是一个值得考虑的选项,因为它能让您的单元测试运行得更快,并且由于默认的监视模式利用了 Vite 即时热模块热重载(HMR),显著提升了开发者体验(DX)。Vitest 提供了与大多数 Jest API 和生态系统库的兼容性,因此在大多数项目中,它应该可以无缝替代 Jest。

Cypress ​

Cypress 是一个基于浏览器的测试运行器,可作为 Vitest 的补充。如果您想使用 Cypress,我们建议将 Vitest 用于应用程序中的所有无头逻辑测试,而将 Cypress 用于所有基于浏览器的逻辑测试。

Cypress 被称为端到端测试工具,但其新的组件测试运行器对测试 Vite 组件提供了出色的支持,是测试任何在浏览器中渲染内容的理想选择。

像 Cypress、WebdriverIO 和 Web Test Runner 这样的基于浏览器的运行器能够发现 Vitest 无法发现的问题,因为它们使用真实的浏览器和真实的浏览器 API。

Cypress 的测试机制专注于确定元素是否可见、可访问和具有可交互性。Cypress 专为 UI 开发和测试而构建,其开发者体验(DX)的核心在于通过测试来驱动可视化组件的开发。您可以看到组件与测试报告一同渲染。测试完成后,组件仍保持可交互状态,您可以使用浏览器的开发者工具调试发生的任何故障。

相比之下,Vitest 专注于为极速的_无头_测试提供最佳的开发者体验(DX)。像 Vitest 这样的基于 Node 的运行器支持各种部分实现的浏览器环境,例如 jsdom,这些环境足以让您快速地对任何引用浏览器 API 的代码进行单元测试。缺点是这些浏览器环境在功能实现上存在局限性。例如,jsdom 缺少许多功能,例如 window.navigation 或布局引擎(offsetTop 等)。

最后,与 Web Test Runner 相比,Cypress 测试运行器更像一个 IDE,而非单纯的测试运行器,因为您还可以在浏览器中看到真实的渲染组件,以及其测试结果和日志。

Cypress 也一直在将 Vite 集成到他们的产品中:使用 Vitesse 重建他们的应用程序 UI,并利用 Vite 推动其项目开发。

我们认为 Cypress 并非单元测试无头代码的理想选择,但结合使用 Cypress(用于 E2E 和组件测试)和 Vitest(用于单元测试)将能满足您应用程序的测试需求。

WebdriverIO ​

WebdriverIO 与 Cypress 类似,是一个基于浏览器的测试运行器,可作为 Vitest 的补充。它既可以作为端到端测试工具使用,也可以用于测试Web 组件。它甚至在底层使用了 Vitest 的组件,例如在组件测试中进行模拟和存根。

WebdriverIO 具有与 Cypress 相同的优势,即允许您在真实浏览器中测试逻辑。然而,它使用实际的Web 标准进行自动化,这克服了在 Cypress 中运行测试时的一些取舍和局限性。此外,它还允许您在移动设备上运行测试,从而在更多环境中测试您的应用程序。

Web Test Runner ​

@web/test-runner 在无头浏览器中运行测试,提供与您的 Web 应用程序相同的执行环境,无需模拟浏览器 API 或 DOM。这也使得可以在真实浏览器中使用开发者工具进行调试,尽管不像 Cypress 测试那样,没有提供用于逐步执行测试的 UI。

要将 @web/test-runner 与 Vite 项目一起使用,请使用 @remcovaes/web-test-runner-vite-plugin。@web/test-runner 不包含断言或模拟库,因此需要您手动添加。

uvu ​

uvu 是一个用于 Node.js 和浏览器的测试运行器。它在单个线程中运行测试,因此测试之间缺乏隔离性,可能会跨文件产生副作用。然而,Vitest 使用 worker 线程来隔离测试并并行运行。

在代码转换方面,uvu 依赖于 require 和 loader 钩子。Vitest 使用 Vite,因此文件通过 Vite 强大的插件系统进行转换。在 Vite 已经能够为大多数常见 Web 工具(TypeScript、JSX、最流行的 UI 框架)提供支持的背景下,uvu 可能会引入不必要的复杂性。如果您的应用程序由 Vite 提供支持,那么配置和维护两个不同的构建和测试管道是不必要的。使用 Vitest,您可以将开发、构建和测试环境的配置统一到一个管道中,共享相同的插件和相同的配置。

uvu 不提供智能监视模式来重新运行已更改的测试,而 Vitest 则凭借默认的监视模式(利用 Vite 即时热模块热重载 HMR)提供了卓越的开发者体验(DX)。

uvu 是运行简单测试的快速选择,但对于更复杂的测试和项目,Vitest 能够提供更快、更可靠的体验。

Pager
上一页高级 API

基于 MIT 许可证 发布。

版权所有 (c) 2021-Present Vitest Team

https://vitest.dev/guide/comparisons

基于 MIT 许可证 发布。

版权所有 (c) 2021-Present Vitest Team