使用 Vitest 进行单元测试:下一代测试框架
为何选择 Vitest?
Vitest 的设计充分考虑了现代开发。它脱颖而出的原因如下:
速度
Vitest 以 Vite 为基础,利用其闪电般的热模块替换 (HMR) 和“esbuild”进行捆绑和转译。结果如下:
在性能基准测试中,由于使用了 Vite 的优化构建管道,Vitest 始终以显著的优势超越 Jest。
**注意:**这些基准可能因项目复杂性和系统规格而异。
兼容性
Vitest 与 Jest 兼容,这意味着您只需进行少量更改即可重用大部分现有测试套件。它还支持开箱即用的 TypeScript、JSX 和 ESM 等流行工具。
开发人员体验
---
设置 Vitest
让我们深入了解如何在 TypeScript 项目中设置 Vitest。我们将使用 React 项目进行演示,但 Vue 3 或 Node.js 项目的步骤类似。
安装
`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 组件
假设你有一个 React 组件:
// src/components/Greeting.tsx import React from 'react'; type GreetingProps = { name: string; }; export const Greeting: React.FC= ({ name }) => { return Hello, {name}!
; };
编写测试
为组件创建测试文件:
// src/components/__tests__/Greeting.test.tsx import { 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 运行测试`
您将看到类似如下的输出:
`✓ 问候组件呈现正确的问候语`
---
高级功能
嘲讽
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 并体验其不同之处!
参考
维特斯网站
维特