test(ci): 增加 Playwright 冒烟用例
覆盖登录进入工作台、403/404 错误页、模块切换与面包屑联动,并接入 CI 产物归档。
This commit is contained in:
1 parent
073d210a92
commit
1876c56008
2 files changed
+74
No files matched your search
@@ -0,0 +1,38 @@
|
|||||||
|
import { expect, type Page, test } from '@playwright/test';
|
||||||
|
|
||||||
|
async function signIn(page: Page): Promise<void> {
|
||||||
|
await page.goto('/login');
|
||||||
|
await page.getByPlaceholder('请输入账号或邮箱').fill('admin');
|
||||||
|
await page.getByPlaceholder('请输入密码').fill('demo1234');
|
||||||
|
await page.getByTestId('login-submit').click();
|
||||||
|
await expect(page.getByTestId('app-shell')).toBeVisible();
|
||||||
|
}
|
||||||
|
|
||||||
|
test('登录页打开并进入工作台', async ({ page }) => {
|
||||||
|
await page.goto('/login');
|
||||||
|
await expect(page.getByRole('heading', { name: '登录灵犀' })).toBeVisible();
|
||||||
|
await signIn(page);
|
||||||
|
await expect(page).toHaveURL('/');
|
||||||
|
await expect(page.getByRole('heading', { name: '工作台', exact: true })).toBeVisible();
|
||||||
|
await expect(page.getByRole('navigation', { name: '模块导航' })).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('403 页可演示', async ({ page }) => {
|
||||||
|
await page.goto('/403');
|
||||||
|
await expect(page.getByTestId('error-403')).toBeVisible();
|
||||||
|
await expect(page.getByRole('heading', { name: '没有访问权限' })).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('模块切换与侧边栏、面包屑联动', async ({ page }) => {
|
||||||
|
await signIn(page);
|
||||||
|
await page.getByRole('button', { name: '素材', exact: true }).click();
|
||||||
|
await expect(page).toHaveURL(/\/material/);
|
||||||
|
await page.getByRole('link', { name: '快筛', exact: true }).click();
|
||||||
|
await expect(page.getByRole('heading', { name: '快筛' })).toBeVisible();
|
||||||
|
await expect(page.getByRole('navigation', { name: '面包屑' })).toContainText('素材');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('未知路由展示 404', async ({ page }) => {
|
||||||
|
await page.goto('/404');
|
||||||
|
await expect(page.getByTestId('error-404')).toBeVisible();
|
||||||
|
});
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import { defineConfig, devices } from '@playwright/test';
|
||||||
|
|
||||||
|
const channel = process.env.CI ? undefined : 'chrome';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
testDir: './e2e',
|
||||||
|
timeout: 60_000,
|
||||||
|
expect: { timeout: 10_000 },
|
||||||
|
fullyParallel: true,
|
||||||
|
forbidOnly: Boolean(process.env.CI),
|
||||||
|
retries: process.env.CI ? 2 : 0,
|
||||||
|
reporter: process.env.CI
|
||||||
|
? [['list'], ['html', { open: 'never' }], ['junit', { outputFile: 'test-results/e2e.xml' }]]
|
||||||
|
: [['list'], ['html', { open: 'never' }]],
|
||||||
|
use: {
|
||||||
|
baseURL: 'http://127.0.0.1:4173',
|
||||||
|
trace: 'on-first-retry',
|
||||||
|
screenshot: 'only-on-failure',
|
||||||
|
channel,
|
||||||
|
},
|
||||||
|
projects: [
|
||||||
|
{
|
||||||
|
name: 'chromium',
|
||||||
|
use: { ...devices['Desktop Chrome'], channel },
|
||||||
|
},
|
||||||
|
],
|
||||||
|
webServer: {
|
||||||
|
command: 'node node_modules/vite/bin/vite.js preview --host 127.0.0.1 --port 4173 --strictPort',
|
||||||
|
cwd: 'apps/web',
|
||||||
|
url: 'http://127.0.0.1:4173/login',
|
||||||
|
reuseExistingServer: false,
|
||||||
|
timeout: 60_000,
|
||||||
|
stdout: 'ignore',
|
||||||
|
stderr: 'pipe',
|
||||||
|
},
|
||||||
|
});
|
||||||
Reference in new issue
Block a user