test: harden e2e auth setup

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
pull/878/head
DevDengChao 2026-04-10 16:23:50 +08:00
parent 968a1ccb40
commit 14edd68d77
1 changed files with 7 additions and 11 deletions

View File

@ -7,21 +7,17 @@ const authFile = 'e2e/.auth/user.json'
/** /**
* Setup Project * Setup Project
* 1. origin * 1. localStorageweb-storage-cache
* 2. 使 evaluate localStorageweb-storage-cache * 2. Vue app
* 3. * 3. storageState
*/ */
setup('authenticate', async ({ page }) => { setup('authenticate', async ({ page }) => {
// 设置 API Mock // 设置 API Mock
await setupAuthMocks(page) await setupAuthMocks(page)
// 步骤1导航到登录页建立 origin // 步骤1在应用脚本运行前注入 localStorage避免页面跳转时 evaluate 失效
await page.goto('/login')
await page.waitForLoadState('domcontentloaded')
// 步骤2直接设置 localStorage
// web-storage-cache 格式:{ c: createTime, e: expiresTime, v: JSON.stringify(value) } // web-storage-cache 格式:{ c: createTime, e: expiresTime, v: JSON.stringify(value) }
await page.evaluate( await page.addInitScript(
({ token, permInfo }) => { ({ token, permInfo }) => {
const now = Date.now() const now = Date.now()
const expireTime = now + 24 * 60 * 60 * 1000 const expireTime = now + 24 * 60 * 60 * 1000
@ -50,11 +46,11 @@ setup('authenticate', async ({ page }) => {
{ token: loginSuccessData, permInfo: adminPermissionInfo } { token: loginSuccessData, permInfo: adminPermissionInfo }
) )
// 步骤3重新加载让 Vue app 读取 localStorage 中的 token // 步骤2首次导航时Vue app 会直接读取 localStorage 中的 token
await page.goto('/') await page.goto('/')
await page.waitForLoadState('networkidle') await page.waitForLoadState('networkidle')
// 验证不在登录页 // 步骤3验证不在登录页
await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 }) await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 })
// 保存认证状态 // 保存认证状态