fix(department): wait for auto-role redirect before department test
When user has exactly 1 active role, chooseRole auto-selects it and
enqueues a router.push to the landing page. loginAndDismissSelectors
now waits for this SPA redirect to complete, so the route guard's
org/department loading runs before page.goto('/clazz') does a full
reload. Also adds extra retry for department loading as fallback.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -51,7 +51,23 @@ async function loginAndDismissSelectors(page: any) {
|
|||||||
console.log('[DeptTest] clicked role');
|
console.log('[DeptTest] clicked role');
|
||||||
await page.waitForTimeout(3_000);
|
await page.waitForTimeout(3_000);
|
||||||
} else {
|
} else {
|
||||||
console.log('[DeptTest] at / but no role selector, break');
|
console.log('[DeptTest] at / but no role selector');
|
||||||
|
// 无角色选择器 → 当前用户角色已自动选中(1个活跃角色)。
|
||||||
|
// chooseRole 内部调用 router.push('/role/profile') 是异步的,
|
||||||
|
// 等待重定向完成,让该 navigtion 的 route guard 走完 org/dept 加载。
|
||||||
|
// 避免后续 page.goto 的完整页面加载冲掉未完成的 SPA 导航。
|
||||||
|
try {
|
||||||
|
await page.waitForFunction(
|
||||||
|
() => window.location.pathname !== '/',
|
||||||
|
{ timeout: 10_000 }
|
||||||
|
);
|
||||||
|
const newPath = await page.evaluate(() => window.location.pathname);
|
||||||
|
console.log('[DeptTest] role auto-redirected to', newPath);
|
||||||
|
// route guard 已在这个导航中完成 org/dept 加载,CurrentDepartmentId 已写入
|
||||||
|
} catch {
|
||||||
|
// 10s 内未重定向(可能没有活跃角色),不做处理
|
||||||
|
console.log('[DeptTest] no redirect within 10s (0 roles?)');
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -118,6 +134,20 @@ test.describe('单部门透明', () => {
|
|||||||
});
|
});
|
||||||
console.log('[DeptTest] state after goto:', JSON.stringify(pageState, null, 2));
|
console.log('[DeptTest] state after goto:', JSON.stringify(pageState, null, 2));
|
||||||
|
|
||||||
|
console.log('[DeptTest] deptId after goto:', pageState.CurrentDepartmentId);
|
||||||
|
|
||||||
|
// 如果部门尚未设置,给 route guard 额外时间完成异步加载
|
||||||
|
if (!pageState.CurrentDepartmentId) {
|
||||||
|
console.log('[DeptTest] waiting extra for department loading...');
|
||||||
|
await page.waitForTimeout(8_000);
|
||||||
|
const retry = await page.evaluate(() => window.localStorage.getItem('CurrentDepartmentId'));
|
||||||
|
console.log('[DeptTest] CurrentDepartmentId after extra wait:', retry);
|
||||||
|
if (retry) {
|
||||||
|
pageState.CurrentDepartmentId = retry;
|
||||||
|
pageState.pathname = await page.evaluate(() => window.location.pathname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 验证 localStorage 写入了 CurrentDepartmentId
|
// 验证 localStorage 写入了 CurrentDepartmentId
|
||||||
const deptId = pageState.CurrentDepartmentId;
|
const deptId = pageState.CurrentDepartmentId;
|
||||||
expect(deptId).toBeTruthy();
|
expect(deptId).toBeTruthy();
|
||||||
|
|||||||
Reference in New Issue
Block a user