| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { fireEvent, render, screen, waitFor } from '@testing-library/react';
- import { beforeEach, describe, expect, it, vi } from 'vitest';
- import { history } from '@umijs/max';
- import LoginPage from '@/pages/Login';
- import { apiRequest } from '@/services/api';
- vi.mock('@/services/api', () => ({
- apiRequest: vi.fn(),
- jsonOptions: (method: string, body: unknown) => ({ method, body: JSON.stringify(body) }),
- setCsrfToken: vi.fn(),
- }));
- describe('登录页', () => {
- beforeEach(() => {
- vi.clearAllMocks();
- });
- it('首次登录后进入强制改密页', async () => {
- vi.mocked(apiRequest).mockResolvedValue({
- username: 'admin',
- must_change_password: true,
- csrf_token: 'csrf',
- });
- render(<LoginPage />);
- fireEvent.change(screen.getByLabelText('密码'), { target: { value: 'qwe0.123456' } });
- fireEvent.click(screen.getByRole('button', { name: /登\s*录/ }));
- await waitFor(() => expect(apiRequest).toHaveBeenCalled());
- expect(history.replace).toHaveBeenCalledWith('/change-password');
- });
- it('展示后端登录错误', async () => {
- vi.mocked(apiRequest).mockRejectedValue(new Error('用户名或密码错误。'));
- render(<LoginPage />);
- fireEvent.change(screen.getByLabelText('密码'), { target: { value: 'bad-password' } });
- fireEvent.click(screen.getByRole('button', { name: /登\s*录/ }));
- expect(await screen.findByText('用户名或密码错误。')).toBeInTheDocument();
- });
- });
|