Vitest 的设计考虑了现代开发。这就是它脱颖而出的原因:
Vitest 以 Vite 作为基础,利用其闪电般快速的热模块替换 (HMR) 和 esbuild 进行捆绑和转译。结果是:
在性能基准测试中,由于使用了 Vite 优化的构建管道,Vitest 始终大幅领先 Jest。
Framework | Time to run 500 tests |
---|---|
Jest | ~8 seconds |
Vitest | ~3 seconds |
Mocha | ~6 seconds |
注意:这些基准可能会根据项目复杂性和系统规格而有所不同。
Vitest 与 Jest 兼容,这意味着您可以通过最少的更改重用大部分现有的测试套件。它还支持开箱即用的流行工具,如 TypeScript、JSX 和 ESM。
---
让我们深入了解在 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 提供了类似 Jest 的 API,使编写测试变得简单。这是一个简单的例子:
想象你有一个 React 组件:
// src/components/Greeting.tsx import React from 'react'; type GreetingProps = { name: string; }; export const Greeting: React.FC<GreetingProps> = ({ name }) => { return <h1>Hello, {name}!</h1>; };
为组件创建测试文件:
// 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(<Greeting name="Vitest" />); 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(<Greeting name="Vitest" />); expect(container).toMatchSnapshot(); });
使用 Vitest 的 CLI 选项来衡量性能:
vitest --run --coverage
---
Vitest 是现代测试的一个引人注目的选择,它提供由 Vite 提供支持的速度、简单性和丰富的功能。无论是从 Jest 迁移还是重新开始,Vitest 都能提供出色的开发人员体验,并确保您的测试与代码一样快地运行。
在您的下一个项目中尝试 Vitest,体验不同之处!
访问网站
维特
以上是使用 Vitest 进行单元测试:下一代测试框架的详细内容。更多信息请关注PHP中文网其他相关文章!