什么是vitest
vitest是由vite提供支持的下一代测试框架
该工具一开始就考虑到了vite,利用了在DX中的改进,例如即时热模块重新加载(HMR)
vite的目标
定位为vite项目的首选测试运行者,甚至对于不使用vite的项目来说也是一个可靠的替代方案
vite项目存在的需求和问题
即对vite原生测试运行器存在·需求:
vite对于常见的web模式提供开箱机用的支持,glob导入,ssr原语,众多插件和集成的生态也正在越来越繁荣,但是对于vite的单元测试方面的探索故事的书写并没有十分完善以及足够的清楚。而大众对于单元测试的需求和要求在增加
而像流行的jest测试框架和vite之间又存在大量重复。迫使用于配置两个不同的管道得问题。
vitest能怎么样解决上述问题
vitest使用与您的构建程序相同的配置的测试运行程序
在开发,构建,测试期间共享公共转换管道
使用相同的插件API进行扩展
让您与工具的维护者提供与vite的一流集成
鉴于jest的广泛采用,提供兼容API,允许你在大多数项目中将其用作直接替代品
vitest的常用功能简介
设置单元测试时
模拟
快照
覆盖率
vitest在性能方面的考虑
vitest非常关心性能
使用worker线程尽可能并行运行
一些端口的测试运行速度提高了一个数量级
默认启用观看模式
通过仔细选择其依赖项 ( 或者直接内联所需的部分) 来保持轻量级
vitest和其他测试框架的比较
jest VS vitest
-
定位·
-
jest
- 接管了测试框架领域,jest团队和社区创建了很多测试API,并推动了许多测试模式,这些模式已经成为了web生态系统的标准
-
vitest
-
你的项目没有使用vite:提供大多数与jest的api和生态系统的兼容性,可以让你更快地运行单元测试,在大多数项目中,是Jest的直接替代品
-
你的项目使用vite:如果使用Jest,那么需要配置和维护两个不同的管道,这是不合理的,如果使用vitest,那么您可以将开发,构建,测试环境的配置定义为单个管道,共享相同的插件和相同的vite.config.js,避免了重复性的麻烦
-
cypress vs vitest
定义:
cypress
被称为端到端测试工具,其新组件测试运行期对测试vite有很大的支持,并且·是测试浏览器中呈现的内容的理想选择
是基于浏览器的测试运行期,是vite的补充工具,将捕获vitest无法捕获的问题(因为其使用真实的浏览器和真实的浏览器api)
vitest
是基于节点的运行程序,专注于为闪电般的无头测试提供最佳DX,
功能
cypress
用于e2e和组件测试
其测试驱动恒旭专注于确定元素是否可见,可访问,交互,cypress专为UI开发和测试而构建,测试完成之后,您可以使用浏览器开发工具调试发生的任何故障
像IDE,您可以在浏览器中看到真实渲染的组件以及测试结果和日志
vitest
用于单元测试(测试无头代码的好选择)
支持各种部分实现的浏览器环境,例如Jsdom,这些环境足以让您快速对引用浏览器api的任何代码进行单元测试,代价是这些浏览器环境在其可实现的功能方面存在限制,例如jsdom缺少很多功能(window.navigation,布局引擎offsetTop)
使用
对应用程序中的所有无头逻辑使用vitest,对所有基于浏览器的逻辑使用cypress
webDriverIO 网络驱动IO
定义:
webDriverIO
是基于浏览器的代替测试运行器,是vitest的补充工具
功能
webDriverIO
端到端测试,web组件测试,允许你在真实浏览器中测试逻辑
使用实际的自动化网络标准,克服了在cypress中运行测试的一些权衡和限制
允许你在移动设备上运行测试
web test runner
功能
web test runner
在无头浏览器中运行测试,提供与web应用程序相同的执行环境,无需模拟浏览器api,或者dom
没有像cypress那样显示用于逐步完成测试的ui
有监视模式,但是不像vitest那样智能,并且可能并不总是重新运行你想要的测试
uvu
定义:
uvu
是nodejs和浏览器的测试运行器
问题
uvu
1.在单个线程中运行测试,因此测试不是孤立的,并且可能会有跨文件泄露
2.如果应用程序由vite提供支持,那么配置和维护两个不同的管道是不合理的
vitest
1.使用工作线程来隔离测试并并行运行它们
2.使用 Vitest,您可以将开发、构建和测试环境的配置定义为单个管道,共享相同的插件和相同的配置。
转换代码
uvu
依赖于require,loader挂钩
vitest
使用vite,因此可以利用vite插件系统的全部功能来转换文件
reload(hmr)
uvu
不提供智能监视模式来重新运行更改后的测试
vitest
通过使用vite即时热模块重新加载的默认监视模式为您提供令人惊叹的DX
用途
uvu是运行简单测试的快速选项,但是vitest对于更复杂的测试和项目可以更快,更可靠