跳到主要内容

Testing - Vitest

安装

npm install -D vitest @vitest/ui
npm install -D @testing-library/jest-dom @testing-library/react @testing-library/user-event jsdom
npm pkg set scripts.test="vitest --ui"

配置

vite.config.ts
/// <reference types="vitest" />

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
test: {
environment: 'jsdom',
globals: true,
setupFiles: './setupTests.ts',
css: true,
},
});
vitest.setup.ts
import '@testing-library/jest-dom/vitest';
import { cleanup } from '@testing-library/react';
import { afterEach } from 'vitest';

afterEach(() => {
cleanup();
});

Test

测试项目由 npm create vite@latest my-app-react -- --template react-ts 生成

src/App.test.tsx
import { expect, it, describe } from 'vitest';
import { render, screen } from '@testing-library/react';

import App from './App';

describe('Input', async () => {
it('app', () => {
render(<App />);
const element = screen.getByRole('heading', { level: 1 });
expect(element).toBeInTheDocument();
});
});

常见问题

  1. Error: Uncaught [TypeError: Cannot destructure property 'basename' of 'React__namespace.useContext(...)' as it is null.]

如果项目中使用了 React Router,同时测试组件中包含 Link 等组件,需要将组件包裹在 MemoryRouter 等组件中进行测试,V5 版本官方文档说明