Skip to Content

核心概念

集成测试验证多个模块协同工作的正确性,重点关注:

  • 接口交互:模块间API调用和数据传输
  • 状态共享:全局状态管理(如Redux)
  • 副作用处理:网络请求和本地存储

Jest 配置

module.exports = { testEnvironment: 'jsdom', setupFilesAfterEnv: ['<rootDir>/test/setupTests.js'], moduleNameMapper: { '^@/(.*)$': '<rootDir>/src/$1' }, coverageDirectory: './coverage', collectCoverageFrom: ['src/**/*.{js,jsx}'] };

API测试示例

import { server } from '../mocks/server'; beforeAll(() => server.listen()); afterEach(() => server.resetHandlers()); afterAll(() => server.close()); test('获取用户数据', async () => { const response = await fetch('/api/user'); const data = await response.json(); expect(data).toMatchObject({ id: 1, name: '测试用户' }); });

组件集成测试

import { render, screen, act } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import LoginForm from '@components/LoginForm'; // 模拟React Query jest.mock('react-query', () => ({ useMutation: () => ({ mutate: jest.fn(), isLoading: false }) })); test('表单提交流程', async () => { render(<LoginForm />); await act(async () => { userEvent.type(screen.getByLabelText('用户名'), 'testuser'); userEvent.type(screen.getByLabelText('密码'), 'password123'); userEvent.click(screen.getByRole('button', { name: '登录' })); }); expect(screen.getByText('正在提交...')).toBeInTheDocument(); });

执行命令

# 安装依赖 pnpm add -D jest @testing-library/react @testing-library/user-event # 运行测试 pnpm test:integration
Last updated on