使用 Vitest 进行单元测试:下一代测试框架

使用 vitest 进行单元测试:下一代测试框架

为什么选择维泰斯特?

vitest 的设计考虑了现代开发。这就是它脱颖而出的原因:

速度

vitest 以 vite 作为基础,利用其闪电般快速的热模块替换 (hmr) 和 esbuild 进行捆绑和转译。结果是:

智能即时监视模式:仅针对受影响的文件重新运行测试,从而实现即时反馈循环。开箱即用的 esm 支持:现代项目受益于对 es 模块的直接支持,无需破解。

在性能基准测试中,由于使用了 vite 优化的构建管道,vitest 始终大幅领先 jest。

framework time to run 500 tests

jest~8 secondsvitest~3 secondsmocha~6 seconds

注意:这些基准可能会根据项目复杂性和系统规格而有所不同。

兼容性

vitest 与 jest 兼容,这意味着您可以通过最少的更改重用大部分现有的测试套件。它还支持开箱即用的流行工具,如 typescript、jsx 和 esm。

开发者经验

与vite的hmr集成,实现快速测试迭代。简单的 api 和配置。丰富的生态系统和不断增长的社区支持。

设置 vitest

让我们深入了解在 typescript 项目中设置 vitest。我们将使用 react 项目来演示这一点,但 vue 3 或 node.js 项目的步骤类似。

安装

确保安装了 node.js 和 npm/yarn/pnpm。安装 vitest 及其对等依赖项:

npm install –save-dev vitest

对于使用 react 的项目,您还需要 react 测试库:

npm install –save-dev @testing-library/react @testing-library/jest-dom

配置

创建或更新您的 vite.config.ts 以启用 vitest:

import { defineconfig } from 'vite';import react from '@vitejs/plugin-react';export default defineconfig({  plugins: [react()],  test: {    globals: true,    environment: 'jsdom', // use 'node' for node.js projects    setupfiles: './test/setup.ts',  },});

添加安装文件

设置文件用于配置测试环境。创建一个 test/setup.ts 文件:
导入 ‘@testing-library/jest-dom’;

添加脚本

更新您的 package.json 以包含测试脚本:

{  "scripts": {    "test": "vitest"  }}

使用 vitest 编写单元测试

vitest 提供了类似 jest 的 api,使编写测试变得简单。这是一个简单的例子:

示例:反应组件

想象你有一个 react 组件:

// src/components/greeting.tsximport react from 'react';type greetingprops = {  name: string;};export const greeting: react.fc = ({ name }) => {  return 

hello, {name}!

;};

编写测试

为组件创建测试文件:

// src/components/__tests__/greeting.test.tsximport { render, screen } from '@testing-library/react';import { describe, it, expect } from 'vitest';import { greeting } from '../greeting';describe('greeting component', () => {  it('renders the correct greeting', () => {    render();    expect(screen.getbytext('hello, vitest!')).tobeinthedocument();  });});

运行测试

使用以下命令运行测试:
npm 运行测试

您将看到与此类似的输出:
✓ greeting 组件渲染正确的问候语

高级功能

嘲笑

vitest直接支持模拟模块和函数:

import { vi } from 'vitest';const mockfn = vi.fn();mockfn();expect(mockfn).tohavebeencalled();

快照测试

快照测试非常简单:

import { render } from '@testing-library/react';import { expect } from 'vitest';import { Greeting } from '../Greeting';test('matches snapshot', () => {  const { container } = render();  expect(container).toMatchSnapshot();});

性能测试

使用 vitest 的 cli 选项来衡量性能:
vitest –run –coverage

结论

vitest 是现代测试的一个引人注目的选择,它提供由 vite 提供支持的速度、简单性和丰富的功能。无论是从 jest 迁移还是重新开始,vitest 都能提供出色的开发人员体验,并确保您的测试与代码一样快地运行。

在您的下一个项目中尝试 vitest,体验不同之处!

参考

访问网站
维特

以上就是使用 Vitest 进行单元测试:下一代测试框架的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1499241.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 21:38:34
下一篇 2025年12月19日 21:38:50

相关推荐

  • 为什么我的 React useEffect 钩子即使在依赖项数组为空的情况下也会运行多次?

    问题在处理 react 项目时,我遇到了 useeffect 挂钩的问题。我的目标是在组件安装时仅从 api 获取数据一次。然而,即使我提供了一个空的依赖项数组,useeffect 仍然运行多次。 这是代码片段: import react, { useeffect, usestate } from …

    2025年12月19日
    000
  • 如何在nodejs环境中使用代理

    配置代理有一个既定的标准。它通过以下环境变量运行: https_proxy:https 流量的代理http_proxy:http 流量的代理no_proxy:不应通过代理运行的 url。 nodejs 的本机获取客户端不提供任何开箱即用的功能,但是您可以使用来自 undici http 客户端的代理…

    2025年12月19日
    000
  • 健壮代码的基本 JavaScript 测试技术

    javascript 测试是软件开发的一个重要方面,可确保代码的可靠性和健壮性。作为一名开发人员,我发现实施全面的测试策略不仅可以尽早发现错误,还可以提高应用程序的整体质量。让我们探索五种基本的 javascript 测试技术,这些技术在我的经验中被证明是非常宝贵的。 单元测试构成了任何可靠测试策略…

    2025年12月19日
    000
  • AI 星座:Nextjs 和 Gemini 的体验

    大家好! 我担任后端开发人员已有几年了,我一直在寻找新技术。最近,我对人工智能和占星学的结合产生了兴趣,并决定使用 Gemini API 创建一个星座预测生成器。 项目: 在这个项目中,我使用 Next.js 作为前端,这是学习新框架的绝佳机会。在后端,我使用 Next.js 和 GEMINI AP…

    2025年12月19日
    000
  • 关心的动画 html css

    ` hj @property –angle { 语法:“”; 初始值:0deg; 继承: false;} @property –x { 语法:“”; 初始值:35%; 继承: false;} @property –shine { 语法:“”; 初始值:透明; 继承…

    2025年12月19日 好文分享
    000
  • js如何自定义事件

    JavaScript 中,自定義事件允許開發人員創建並觸發特定應用事件,讓程式碼做出反應:使用 new CustomEvent() 構造函數創建自定義事件。使用 dispatchEvent() 方法觸發自定義事件。使用 addEventListener() 方法監聽自定義事件,獲取事件名稱、事件監聽…

    2025年12月19日
    000
  • js如何加密

    JavaScript 提供多种加密方法:1. 字符串加密(AES);2. 哈希算法(SHA256);3. 对称加密(TripleDES);4. 非对称加密(rsa);5. 其他方法(base64、Web Crypto API)。 如何使用 JavaScript 加密 JavaScript 是一种广泛…

    2025年12月19日
    000
  • 如何封装js

    封装 JavaScript 代码可提高代码可维护性、可扩展性和可测试性。步骤如下:创建模块。定义私有变量和函数。导出公共接口。导入模块。 如何封装 JavaScript 代码 封装是将代码组织成可重用的模块的过程。这有助于提高代码的可维护性、可扩展性和可测试性。以下是封装 JavaScript 代码…

    2025年12月19日
    000
  • js如何异步

    答案:是的,JavaScript 中存在异步编程,它是一种处理长时间任务的方法,无需等待其完成即可继续执行其他任务。详细描述:异步编程原理:异步编程允许任务在后台运行,而主程序继续执行。JavaScript 中的异步编程:可以使用回调函数、Promise 或 async/await 语法糖实现。优点…

    2025年12月19日
    000
  • Logging System with Proxy and Fetch

    代理对象:fetchlogger 包装了 fetch 函数。它使用 apply trap 来拦截对 fetch 的调用。 请求日志记录:记录请求的 url 和选项。响应处理:记录响应状态、状态文本和 url。克隆响应以确保正文可以被多次读取。 错误处理:捕获并记录提取过程中遇到的任何错误。 使用代理…

    2025年12月19日
    000
  • 使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践

    介绍: 作为 Web 开发人员,我们的主要目标之一是创建不仅实用而且可扩展的应用程序。可扩展性确保您的应用程序可以随着用户群的增长而增长,处理增加的流量,并随着时间的推移保持性能。在本文中,我将引导您了解使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践:MongoDB、Express、Re…

    2025年12月19日
    000
  • 如何将交互式图表和图形添加到 Tailwind CSS 管理模板

    管理仪表板模板对于有效管理和可视化数据至关重要。 tailwind css 以其实用性优先的方法而闻名,它简化了设计令人惊叹的管理仪表板的过程。向这些仪表板添加交互式图表和图形可以将原始数据转换为富有洞察力的可视化效果,从而增强整体用户体验。本博客将指导您完成将交互式图表集成到基于 tailwind…

    2025年12月19日 好文分享
    000
  • typescript定义接口教程

    接口是在 TypeScript 中定义对象或类属性和方法的形状的语法结构。通过使用 interface 关键字来定义接口,TypeScript 编译器可以检查代码是否遵守这些约定,从而提高代码的可读性、静态类型检查和可重用性。 TypeScript 接口定义教程 TypeScript 是一种流行的 …

    2025年12月19日
    000
  • typescript接口数组

    TypeScript 中使用接口数组可以为数组元素定义特定类型,确保类型安全和代码可读性。接口数组的创建、访问元素以及推进类型均有特定的语法和注意事项。 TypeScript 中使用接口数组 TypeScript 接口是用于定义对象的类型,而数组是用于存储数据的有序集合。TypeScript 中的接…

    2025年12月19日
    000
  • typescript 类型声明

    TypeScript 类型声明是描述变量、函数和类类型的工具,包括显式声明和类型推断。类型声明可提高代码可读性,增强 IDE 支持,改善代码可靠性,并提高可重用性。在 TypeScript 中使用类型声明很简单,只需在变量、函数或类定义之前使用冒号指定类型。 TypeScript 类型声明 Type…

    2025年12月19日
    000
  • typescript 变量类型

    TypeScript 中存在变量类型,它定义变量值类型。这些类型包括基本类型(如 number、string、boolean)、复合类型(如 array、tuple、enum)和引用类型(如 class、interface)。变量类型可以通过显式声明(如 let age: number = 25; …

    2025年12月19日
    000
  • typescript高级类型声明

    TypeScript 高级类型声明是一组高级功能,用于定义复杂和可重用的类型,从而增强代码的可读性、可维护性和可重用性。包括:1. 类型别名;2. 交叉类型;3. 联合类型;4. 元组类型;5. 枚举类型;6. 泛型类型;7. 条件类型;8. 映射类型。它们提高代码可读性、可维护性、可重用性,并进行…

    2025年12月19日
    000
  • typescript断言类型

    TypeScript 中的断言类型明确了表达式或变量的类型,帮助编译器理解特定的类型。使用断言类型有两种方法:非空断言操作符 (!) 用于确保变量不会为 null 或 undefined,类型断言语法 () 将所需类型包围在表达式周围。断言类型应谨慎使用,以避免类型错误。在变量确定不为 null 或…

    2025年12月19日
    000
  • typescript使用技巧

    TypeScript 是一种扩展 JavaScript 的类型安全语言,可防止数据类型不兼容导致的错误。它提供类型安全、代码可重用性、代码维护、与 JavaScript 兼容等好处。TypeScript 使用技巧包括:定义类型;使用类型别名;定义接口;使用枚举;定义类;使用泛型;使用装饰器。 Typ…

    2025年12月19日
    000
  • typescript高级技巧

    高级 TypeScript 技巧包括:联合类型、元组、枚举、接口继承、泛型函数和类、模块命名空间和导入、类和方法装饰器、async/await 和 Promise.all,以及类型断言、类型保护和编译时检查。这些技巧可显著提高代码质量、可维护性和可扩展性。 TypeScript 高级技巧 TypeS…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信