- Update skill count to 170, Python tools to 213, references to 314 across all docs - Regenerate all 170 skill doc pages from latest SKILL.md sources - Update CLAUDE.md with v2.1.1 highlights, accurate architecture tree, and roadmap - Update README.md badges and overview table - Update marketplace.json metadata description and version - Update mkdocs.yml, index.md, getting-started.md with correct numbers
107 lines
3.2 KiB
Markdown
107 lines
3.2 KiB
Markdown
---
|
|
title: "Review Playwright Tests"
|
|
description: "Review Playwright Tests - Claude Code skill from the Engineering - Core domain."
|
|
---
|
|
|
|
# Review Playwright Tests
|
|
|
|
**Domain:** Engineering - Core | **Skill:** `review` | **Source:** [`engineering-team/playwright-pro/skills/review/SKILL.md`](https://github.com/alirezarezvani/claude-skills/tree/main/engineering-team/playwright-pro/skills/review/SKILL.md)
|
|
|
|
---
|
|
|
|
|
|
# Review Playwright Tests
|
|
|
|
Systematically review Playwright test files for anti-patterns, missed best practices, and coverage gaps.
|
|
|
|
## Input
|
|
|
|
`$ARGUMENTS` can be:
|
|
- A file path: review that specific test file
|
|
- A directory: review all test files in the directory
|
|
- Empty: review all tests in the project's `testDir`
|
|
|
|
## Steps
|
|
|
|
### 1. Gather Context
|
|
|
|
- Read `playwright.config.ts` for project settings
|
|
- List all `*.spec.ts` / `*.spec.js` files in scope
|
|
- If reviewing a single file, also check related page objects and fixtures
|
|
|
|
### 2. Check Each File Against Anti-Patterns
|
|
|
|
Load `anti-patterns.md` from this skill directory. Check for all 20 anti-patterns.
|
|
|
|
**Critical (must fix):**
|
|
1. `waitForTimeout()` usage
|
|
2. Non-web-first assertions (`expect(await ...)`)
|
|
3. Hardcoded URLs instead of `baseURL`
|
|
4. CSS/XPath selectors when role-based exists
|
|
5. Missing `await` on Playwright calls
|
|
6. Shared mutable state between tests
|
|
7. Test execution order dependencies
|
|
|
|
**Warning (should fix):**
|
|
8. Tests longer than 50 lines (consider splitting)
|
|
9. Magic strings without named constants
|
|
10. Missing error/edge case tests
|
|
11. `page.evaluate()` for things locators can do
|
|
12. Nested `test.describe()` more than 2 levels deep
|
|
13. Generic test names ("should work", "test 1")
|
|
|
|
**Info (consider):**
|
|
14. No page objects for pages with 5+ locators
|
|
15. Inline test data instead of factory/fixture
|
|
16. Missing accessibility assertions
|
|
17. No visual regression tests for UI-heavy pages
|
|
18. Console error assertions not checked
|
|
19. Network idle waits instead of specific assertions
|
|
20. Missing `test.describe()` grouping
|
|
|
|
### 3. Score Each File
|
|
|
|
Rate 1-10 based on:
|
|
- **9-10**: Production-ready, follows all golden rules
|
|
- **7-8**: Good, minor improvements possible
|
|
- **5-6**: Functional but has anti-patterns
|
|
- **3-4**: Significant issues, likely flaky
|
|
- **1-2**: Needs rewrite
|
|
|
|
### 4. Generate Review Report
|
|
|
|
For each file:
|
|
```
|
|
## <filename> — Score: X/10
|
|
|
|
### Critical
|
|
- Line 15: `waitForTimeout(2000)` → use `expect(locator).toBeVisible()`
|
|
- Line 28: CSS selector `.btn-submit` → `getByRole('button', { name: "submit" })`
|
|
|
|
### Warning
|
|
- Line 42: Test name "test login" → "should redirect to dashboard after login"
|
|
|
|
### Suggestions
|
|
- Consider adding error case: what happens with invalid credentials?
|
|
```
|
|
|
|
### 5. For Project-Wide Review
|
|
|
|
If reviewing an entire test suite:
|
|
- Spawn sub-agents per file for parallel review (up to 5 concurrent)
|
|
- Or use `/batch` for very large suites
|
|
- Aggregate results into a summary table
|
|
|
|
### 6. Offer Fixes
|
|
|
|
For each critical issue, provide the corrected code. Ask user: "Apply these fixes? [Yes/No]"
|
|
|
|
If yes, apply all fixes using `Edit` tool.
|
|
|
|
## Output
|
|
|
|
- File-by-file review with scores
|
|
- Summary: total files, average score, critical issue count
|
|
- Actionable fix list
|
|
- Coverage gaps identified (pages/features with no tests)
|