Review automatizovanych UI testu. Kontroluje soulad s .cursorrules, CLAUDE.md, playwright-locators a page-objects. Pouzij pri code review PR, pred commitem nebo kdyz uzivatel pozada o revizi testovaciho kodu.
| Zdroj | Priorita | Obsah |
|---|---|---|
| CLAUDE.md | 1 | Architektura, fixtures, test data, credentials |
| .cursorrules | 2 | Obecne Playwright/TS konvence |
| playwright-locators | 3 | Hierarchie lokatoru, zakazane vzory |
| page-objects | 4 | Page Object struktura, BasePage pouziti |
Pri rozporu ma prednost CLAUDE.md.
BasePagereadonly propertiesgoto(language?: string)isLoaded() pro overeni nactenipage.locator('.class'), page.locator('#id'), page.locator('div > span')getByTestId() > getByRole() > getByLabel() > getByPlaceholder() > getByText()getByRole/getByLabel ma komentar s TODO na pridani testIdclickElement(), fillInput(), clearInput(), selectOption(), checkCheckbox(), uncheckCheckbox()locator.click() nebo locator.fill() – pouzij BasePageexpect) – patri do testupage.waitForTimeout() – pouzij WaitHelper nebo BasePagePromise<void>fillX(), clickX(), getX(), slozene jako login(), submit()./fixtures/page: import { test, expect } from './fixtures/page'loginpageData() atd../constants: TEST_USER pro credentialstest.describe() pro logicke skupiny@smoke, @regression, @security, @performance, @integration kde vhodnepage.locator() s CSS/XPathexpect(locator).toBeVisible(), toHaveText(), toBeEnabled()page.waitForTimeout()expect(result).toBeTruthy()TEST_USER nebo fixturetestData.en, testData.cs) – ne hardcodePagesFixtures obsahuje vsechny page fixturespageName (bez prednacteni), pageNameCS / pageNamePL (s goto)await use(pageObject) po pripravepage.waitForTimeout()Pouzivej tristupnove oznaceni:
| Uroven | Emoji | Vyznam |
|---|---|---|
| Kriticke | 🔴 | Must fix pred mergem – poruseni pravidel, flaky potencial, bezpecnost |
| Navrh | 🟡 | Doporuceno opravit – zlepseni stability, citelnosti, konzistence |
| Nice to have | 🟢 | Volitelne vylepseni |
## Code Review – login.spec.ts
### 🔴 Kriticke
- **Lokatory v LoginPage.ts**: Pouzity `page.locator('input[name="Username"]')` – prepis na `getByTestId()` nebo `getByLabel()`. Viz skill playwright-locators.
### 🟡 Navrh
- **Aserce**: `expect(validSummaryErrors).toContain(...)` – zvaz `expect(locator).toHaveText()` pro web-first assertion.
- **Test data**: Konstanta `testData` na urovni describe – v poradku, ale u vetsich souboru zvaz beforeEach pro cerstva data.
### 🟢 Nice to have
- Pridani testId do frontend komponent pro stabilnejsi lokatory.
| Problem | Spravny pristup |
|---|---|
page.locator('.btn') | page.getByTestId('submit-btn') nebo page.getByRole('button', { name: /odeslat/i }) |
page.waitForTimeout(2000) | WaitHelper.waitForLoadingToDisappear() nebo expect(locator).toBeVisible() |
await locator.click() v POM | this.clickElement(locator) |
| Credentials v kodu | TEST_USER.email, TEST_USER.password z constants |
expect(x).toBeTruthy() | Specificka aserce: expect(locator).toBeVisible(), toHaveText() |
| Assertions v Page Objectu | Presunout do testu |
Chybejici goto() implementace | Kazda page musi implementovat abstraktni goto() |
Import @playwright/test misto fixtures | import { test, expect } from './fixtures/page' |