首页 > web前端 > js教程 > 使用 Vitest 进行单元测试:下一代测试框架

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

Patricia Arquette
发布: 2024-12-29 11:46:10
原创
248 人浏览过

Unit Testing with Vitest: A Next-Generation Testing Framework

为什么选择维泰斯特?

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

速度

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

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

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

Framework Time to run 500 tests
Jest ~8 seconds
Vitest ~3 seconds
Mocha ~6 seconds

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

兼容性

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

开发者经验

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

---

设置 Vitest

让我们深入了解在 TypeScript 项目中设置 Vitest。我们将使用 React 项目来演示这一点,但 Vue 3 或 Node.js 项目的步骤类似。

安装

  1. 确保安装了 Node.js 和 npm/yarn/pnpm。
  2. 安装 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.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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板