fix frontend phase0 bugs

This commit is contained in:
2026-03-18 16:34:27 +08:00
parent 2d063870fe
commit b6abf43075
3 changed files with 50 additions and 52 deletions
+20 -48
View File
@@ -85,6 +85,19 @@ describe('Login Page', () => {
expect(html).toContain('登录')
})
// 辅助:填写表单并提交,绕过 Ant Design 表单验证
async function submitLogin(
fields: { username: string; password: string; remember?: boolean },
) {
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = fields.username
vm.formState.password = fields.password
if (fields.remember !== undefined) vm.formState.remember = fields.remember
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
}
it('calls /api/v1/login, sets token/user and redirects to /', async () => {
const { api } = await import('@/utils/request')
const mockResponse = {
@@ -96,17 +109,7 @@ describe('Login Page', () => {
await mountPage()
const store = useUserStore()
// 直接调用 handleSubmit 来绕过表单验证
// 通过组件 vm 访问 setup 暴露的方法
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = 'admin'
vm.formState.password = 'password'
vm.formRef = { value: { validate: vi.fn().mockResolvedValue(true) } }
// mock formRef.validate
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
await submitLogin({ username: 'admin', password: 'password' })
expect(api.post).toHaveBeenCalledWith('/api/v1/login', {
username: 'admin',
@@ -128,13 +131,7 @@ describe('Login Page', () => {
})
await mountPage()
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = 'user'
vm.formState.password = 'pass'
vm.formState.remember = false
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
await submitLogin({ username: 'user', password: 'pass', remember: false })
expect(localStorage.getItem('access_token')).toBeNull()
expect(localStorage.getItem('user')).toBeNull()
@@ -150,12 +147,7 @@ describe('Login Page', () => {
mockRoute.query = { redirect: '/dashboard' }
await mountPage()
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = 'user'
vm.formState.password = 'pass'
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
await submitLogin({ username: 'user', password: 'pass' })
vi.advanceTimersByTime(500)
expect(mockPush).toHaveBeenCalledWith('/dashboard')
@@ -171,12 +163,7 @@ describe('Login Page', () => {
mockRoute.query = { redirect: '//evil.com' }
await mountPage()
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = 'user'
vm.formState.password = 'pass'
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
await submitLogin({ username: 'user', password: 'pass' })
vi.advanceTimersByTime(500)
expect(mockPush).toHaveBeenCalledWith('/')
@@ -192,12 +179,7 @@ describe('Login Page', () => {
mockRoute.query = { redirect: 'http://evil.com' }
await mountPage()
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = 'user'
vm.formState.password = 'pass'
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
await submitLogin({ username: 'user', password: 'pass' })
vi.advanceTimersByTime(500)
expect(mockPush).toHaveBeenCalledWith('/')
@@ -209,12 +191,7 @@ describe('Login Page', () => {
const errorSpy = vi.spyOn(message, 'error').mockImplementation(() => ({}) as any)
await mountPage()
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = 'user'
vm.formState.password = 'wrong'
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
await submitLogin({ username: 'user', password: 'wrong' })
expect(errorSpy).toHaveBeenCalledWith('用户名或密码错误')
errorSpy.mockRestore()
@@ -226,12 +203,7 @@ describe('Login Page', () => {
const errorSpy = vi.spyOn(message, 'error').mockImplementation(() => ({}) as any)
await mountPage()
const vm = wrapper.getCurrentComponent().setupState
vm.formState.username = 'user'
vm.formState.password = 'pass'
vm.formRef = { validate: vi.fn().mockResolvedValue(true) }
await vm.handleSubmit()
await flushPromises()
await submitLogin({ username: 'user', password: 'pass' })
expect(errorSpy).toHaveBeenCalledWith('登录失败,请检查网络连接')
errorSpy.mockRestore()