From 747ac33f7b6218942bf6e3849004ead66fa0a23f Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 28 Feb 2022 21:01:50 +0800 Subject: [PATCH] test: basic e2e usercase --- web/e2e/playwright/.gitignore | 1 + web/e2e/playwright/package.json | 6 +-- web/e2e/playwright/playwright.config.ts | 4 +- web/e2e/playwright/tests/entry.spec.ts | 39 +++++++++++++++++++ .../{example.spec.ts => example.spec.ts.skip} | 0 web/e2e/playwright/tests/main.spec.ts | 12 ++++++ web/e2e/playwright/tests/utils/user.ts | 23 +++++++++++ 7 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 web/e2e/playwright/tests/entry.spec.ts rename web/e2e/playwright/tests/{example.spec.ts => example.spec.ts.skip} (100%) create mode 100644 web/e2e/playwright/tests/main.spec.ts create mode 100644 web/e2e/playwright/tests/utils/user.ts diff --git a/web/e2e/playwright/.gitignore b/web/e2e/playwright/.gitignore index dbd64df8..ddf1dd95 100644 --- a/web/e2e/playwright/.gitignore +++ b/web/e2e/playwright/.gitignore @@ -1,3 +1,4 @@ node_modules/ test-results/ playwright-report/ +auth.json diff --git a/web/e2e/playwright/package.json b/web/e2e/playwright/package.json index 82cc9a83..ab827906 100644 --- a/web/e2e/playwright/package.json +++ b/web/e2e/playwright/package.json @@ -6,10 +6,10 @@ "license": "MIT", "private": true, "scripts": { - "test": "playwright test", - "test:chromium": "playwright test --project=chromium", + "test": "playwright test --project=chromium", + "test:all": "playwright test", "test:debug": "playwright test --debug", - "codegen": "playwright codegen wikipedia.org" + "codegen": "playwright codegen http://localhost:11011" }, "devDependencies": { "@playwright/test": "^1.19.2" diff --git a/web/e2e/playwright/playwright.config.ts b/web/e2e/playwright/playwright.config.ts index 0959010a..513a728c 100644 --- a/web/e2e/playwright/playwright.config.ts +++ b/web/e2e/playwright/playwright.config.ts @@ -28,9 +28,11 @@ const config: PlaywrightTestConfig = { /* Opt out of parallel tests on CI. */ workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: 'html', + // reporter: 'html', + reporter: 'line', /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { + baseURL: 'http://localhost:11011', /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ actionTimeout: 0, /* Base URL to use in actions like `await page.goto('/')`. */ diff --git a/web/e2e/playwright/tests/entry.spec.ts b/web/e2e/playwright/tests/entry.spec.ts new file mode 100644 index 00000000..47441551 --- /dev/null +++ b/web/e2e/playwright/tests/entry.spec.ts @@ -0,0 +1,39 @@ +import { test, expect } from '@playwright/test'; + +test.beforeEach(async ({ page }) => { + await page.goto('/'); +}); + +test.describe('entry page', () => { + test('should auto jump to entry page', async ({ page }) => { + await expect(page).toHaveURL('/entry/login'); + }); + + test('auto goto entry if not login', async ({ page }) => { + await page.goto('/main'); + await expect(page).toHaveURL('/entry/login?redirect=%2Fmain'); // should with redirect + }); + + test('registry', async ({ page }) => { + await page.locator('text=注册账号').click(); + await expect(page).toHaveURL('/entry/register'); + + await page.locator('button:has-text("注册账号")').click(); + await expect(page.locator('p.text-red-500')).toHaveText('邮箱不能为空'); + + await page.locator('[name="reg-email"]').click(); + await page.locator('[name="reg-email"]').fill('123456789'); + await page.locator('button:has-text("注册账号")').click(); + await expect(page.locator('p.text-red-500')).toHaveText('邮箱格式不正确'); + + await page.locator('[name="reg-email"]').click(); + await page.locator('[name="reg-email"]').fill('test@moonrailgun.com'); + await page.locator('button:has-text("注册账号")').click(); + await expect(page.locator('p.text-red-500')).toHaveText('密码不能低于6位'); + + await page.locator('[name="reg-password"]').click(); + await page.locator('[name="reg-password"]').fill('1234'); + await page.locator('button:has-text("注册账号")').click(); + await expect(page.locator('p.text-red-500')).toHaveText('密码不能低于6位'); + }); +}); diff --git a/web/e2e/playwright/tests/example.spec.ts b/web/e2e/playwright/tests/example.spec.ts.skip similarity index 100% rename from web/e2e/playwright/tests/example.spec.ts rename to web/e2e/playwright/tests/example.spec.ts.skip diff --git a/web/e2e/playwright/tests/main.spec.ts b/web/e2e/playwright/tests/main.spec.ts new file mode 100644 index 00000000..3cc2db99 --- /dev/null +++ b/web/e2e/playwright/tests/main.spec.ts @@ -0,0 +1,12 @@ +import { loginToDemoUser } from './utils/user'; +import { test, expect } from '@playwright/test'; + +test.beforeEach(async ({ page, context }) => { + await loginToDemoUser(page, context); +}); + +test.describe('Main Process', () => { + test('Check Personal Route', () => { + console.log('TODO'); + }); +}); diff --git a/web/e2e/playwright/tests/utils/user.ts b/web/e2e/playwright/tests/utils/user.ts new file mode 100644 index 00000000..c503b2a6 --- /dev/null +++ b/web/e2e/playwright/tests/utils/user.ts @@ -0,0 +1,23 @@ +import { BrowserContext, expect, Page } from '@playwright/test'; + +const storagePath = './auth.json'; + +/** + * 登录到测试账号 + * + * 需要提前注册 + */ +export async function loginToDemoUser(page: Page, context: BrowserContext) { + await page.goto('/entry/login'); + await page + .locator('input[name="login-email"]') + .fill('tailchat-demo@msgbyte.com'); + await page.locator('input[name="login-password"]').fill('tailchat-demo'); + await page.locator('button:has-text("登录")').click(); + + await expect(page).toHaveURL('/main/personal/friends'); // should with redirect + + await context.storageState({ + path: storagePath, + }); +}