fix frontend phase0 bugs
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user