test(admin): moicen 管理端 /tasks Playwright 与 .env 样例

MOICEN_ADMIN_* 与 HUIKE_ADMIN_BASE_URL;凭据仅本地 .env.e2e(gitignore)。

Made-with: Cursor
This commit is contained in:
2026-04-26 20:22:17 +08:00
parent 5c8b2330d5
commit 700532b36a
3 changed files with 44 additions and 3 deletions
+6 -1
View File
@@ -1,3 +1,8 @@
# 复制为 .env.e2e(已 gitignore
# 复制为 .env.e2e(已 gitignore。勿将含真实口令的 .env.e2e 提交到 git。
MOICEN_E2E_UNIONID=
HUIKE_FRONT_BASE_URL=https://music-room.moicen.com
# 管理端 tasks 页(tests/admin-tasks.spec.ts);口令仅放本地 .env.e2e
HUIKE_ADMIN_BASE_URL=https://admin.moicen.com
MOICEN_ADMIN_USER=
MOICEN_ADMIN_PASSWORD=
+3 -2
View File
@@ -12,7 +12,7 @@ npx playwright test
走代理安装(默认 `http://localhost:7890`):`npm run install:with-proxy`
可选:复制 `.env.e2e.example``.env.e2e`,填写 **`MOICEN_E2E_UNIONID`**(仅此一项敏感凭据即可跑登录链与串号用例)。**不必**配置 `real_name`:姓名非唯一标识、会变,断言「欢迎回来」等 UI 即可。勿提交 `.env.e2e`
可选:复制 `.env.e2e.example``.env.e2e`。音乐房串号用例填 **`MOICEN_E2E_UNIONID`**;管理端 **`/tasks`** 用例填 **`MOICEN_ADMIN_USER`** / **`MOICEN_ADMIN_PASSWORD`**(见 example 内说明)。勿提交 `.env.e2e`
用例概览:
@@ -21,8 +21,9 @@ npx playwright test
| `tests/guest-onboarding.spec.ts` | 未登录:仅见「请返回微信小程序完成登录」,不出现已登录工作台 |
| `tests/home-shell.spec.ts` | `#app`、伪造 unionid 不白屏、`page_path` 净化 |
| `tests/logged-in-and-isolation.spec.ts` | 需 Secret:登录后非访客态;异主 unionid 剥离;多角色选身份后见「欢迎回来」(不校验姓名) |
| `tests/admin-tasks.spec.ts` | 需 `MOICEN_ADMIN_USER` / `MOICEN_ADMIN_PASSWORD`:管理端登录后打开 `/tasks` |
未配置 `MOICEN_E2E_UNIONID` 时,`logged-in-and-isolation` 内用例全部 skip。
未配置 `MOICEN_E2E_UNIONID` 时,`logged-in-and-isolation` 内用例全部 skip。未配置管理端账号时,`admin-tasks` 内用例 skip。
## GitHub Actions
+35
View File
@@ -0,0 +1,35 @@
import { test, expect } from '@playwright/test';
const adminUser = process.env.MOICEN_ADMIN_USER?.trim();
const adminPassword = process.env.MOICEN_ADMIN_PASSWORD?.trim();
const adminBase =
process.env.HUIKE_ADMIN_BASE_URL?.trim() || 'https://admin.moicen.com';
test.describe('管理端 tasksRust TS', () => {
test.skip(
!adminUser || !adminPassword,
'需要 MOICEN_ADMIN_USER / MOICEN_ADMIN_PASSWORD(见 .env.e2e.example → .env.e2e'
);
test('登录后可打开 /tasks 并出现任务页结构', async ({ page }) => {
await page.goto(`${adminBase}/login`, {
waitUntil: 'domcontentloaded',
timeout: 60_000,
});
await page.locator('#username_field').fill(adminUser!);
await page.locator('#password_field').fill(adminPassword!);
await page.locator('#submit_btn').click();
await page.waitForURL((u) => !u.pathname.endsWith('/login'), {
timeout: 60_000,
});
await page.goto(`${adminBase}/tasks`, {
waitUntil: 'domcontentloaded',
timeout: 60_000,
});
await expect(page.locator('#app')).toBeVisible({ timeout: 30_000 });
await expect(
page.getByRole('columnheader', { name: 'Task ID' })
).toBeVisible({ timeout: 45_000 });
});
});