使用 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 并体验其不同之处!
参考
维特斯网站
维特