Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Testing for React/Next.js with Jest, React Testing Library, and Playwright. Use when generating tests, writing unit tests, analyzing coverage, scaffolding E2E tests, configuring Jest, or improving test quality.
.claude/skills/borghei-senior-qa/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -36% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 11% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 0% | 0% |
Test automation, coverage analysis, and quality assurance patterns for React and Next.js applications. Generates Jest + React Testing Library unit test stubs, analyzes Istanbul/LCOV coverage for gaps, and scaffolds Playwright E2E suites for App Router and Pages Router projects.
jest-axe a11y).Before generating tests, confirm these inputs. If any is unknown or vague, ASK — do not assume:
test_suite_generator vs e2e_test_scaffolder)jest-axe) (sets which test stubs are emitted)Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
| Tool | Purpose | Command | |------|---------|---------| | test_suite_generator.py | Generate Jest + RTL test stubs from React components | python scripts/test_suite_generator.py src/components/ --output __tests__/ | | coverage_analyzer.py | Analyze Istanbul/LCOV coverage and report gaps | python scripts/coverage_analyzer.py coverage/coverage-final.json --threshold 80 | | e2e_test_scaffolder.py | Scaffold Playwright E2E tests from Next.js routes | python scripts/e2e_test_scaffolder.py src/app/ --output e2e/ |
Load the reference that matches the task — keep this file lean and pull detail on demand:
This skill covers:
jest-axe integration.This skill does NOT cover:
senior-backend for Express/Node.js testing patterns).senior-devops for infrastructure and performance tooling).| Skill | Integration | Data Flow | |-------|-------------|-----------| | senior-frontend | Generated test stubs align with component patterns from the frontend skill | Frontend components --> test_suite_generator.py --> test files | | senior-fullstack | Code quality analyzer consumes the same coverage reports produced here | coverage_analyzer.py output --> fullstack quality dashboard | | senior-devops | E2E test scaffolder generates CI-ready Playwright configs that plug into DevOps pipelines | e2e_test_scaffolder.py --> playwright.config.ts --> GitHub Actions workflow | | code-reviewer | Coverage gaps feed directly into code review checklists for untested changes | coverage_analyzer.py gaps --> review checklist items | | tdd-guide | TDD workflow references this skill's test generator for initial red-phase stub creation | TDD cycle --> test_suite_generator.py --scan-only --> write tests --> implement | | qa-browser-automation | Page Object Models generated here are consumed by the browser automation skill for advanced E2E scenarios | e2e_test_scaffolder.py --include-pom --> POM classes --> browser automation flows |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-17 | fail→pass | 16,134 | 9,430 | -42% | 1 | 1 | 0% | 2,060 | 2,706 | +31% | 0 | 0 | — |
case-06 | fail→fail | 20,620 | 12,085 | -41% | 1 | 1 | 0% | 3,141 | 3,428 | +9% | 0 | 0 | — |
case-07 | fail→pass | 19,141 | 5,093 | -73% | 1 | 1 | 0% | 3,513 | 2,258 | -36% | 0 | 0 | — |
case-01 | fail→fail | 17,437 | 20,234 | +16% | 1 | 1 | 0% | 3,752 | 5,434 | +45% | 0 | 0 | — |
case-02 | fail→pass | 12,266 | 9,426 | -23% | 1 | 1 | 0% | 2,370 | 3,253 | +37% | 0 | 0 | — |
case-03 | pass→pass | 5,876 | 8,067 | +37% | 1 | 1 | 0% | 1,008 | 3,118 | +209% | 0 | 0 | — |
case-04 | fail→fail | 16,393 | 14,649 | -11% | 1 | 1 | 0% | 3,008 | 4,047 | +35% | 0 | 0 | — |
case-05 | fail→fail | 16,551 | 15,439 | -7% | 1 | 1 | 0% | 2,830 | 3,951 | +40% | 0 | 0 | — |
case-08 | fail→pass | 8,774 | 3,554 | -59% | 1 | 1 | 0% | 1,725 | 1,921 | +11% | 0 | 0 | — |
case-09 | fail→pass | 12,304 | 4,108 | -67% | 1 | 1 | 0% | 1,994 | 2,000 | +0% | 0 | 0 | — |
case-10 | fail→pass | 11,602 | 2,788 | -76% | 1 | 1 | 0% | 2,091 | 1,869 | -11% | 0 | 0 | — |
case-11 | pass→pass | 4,940 | 5,907 | +20% | 1 | 1 | 0% | 994 | 2,413 | +143% | 0 | 0 | — |
case-16 | fail→pass | 17,518 | 11,124 | -36% | 1 | 1 | 0% | 2,546 | 3,367 | +32% | 0 | 0 | — |
case-12 | fail→pass | 8,556 | 2,974 | -65% | 1 | 1 | 0% | 1,274 | 1,886 | +48% | 0 | 0 | — |
case-13 | fail→pass | 16,879 | 4,265 | -75% | 1 | 1 | 0% | 2,766 | 2,045 | -26% | 0 | 0 | — |
case-14 | fail→pass | 13,163 | 3,317 | -75% | 1 | 1 | 0% | 2,280 | 1,924 | -16% | 0 | 0 | — |
case-15 | fail→pass | 8,815 | 4,542 | -48% | 1 | 1 | 0% | 1,316 | 2,084 | +58% | 0 | 0 | — |
case-18 | fail→pass | 13,777 | 9,052 | -34% | 1 | 1 | 0% | 2,195 | 3,184 | +45% | 0 | 0 | — |
case-19 | fail→pass | 15,496 | 13,993 | -10% | 1 | 1 | 0% | 2,590 | 3,760 | +45% | 0 | 0 | — |
case-20 | fail→pass | 14,410 | 11,241 | -22% | 1 | 1 | 0% | 2,299 | 3,210 | +40% | 0 | 0 | — |
case-21 | fail→pass | 13,140 | 5,124 | -61% | 1 | 1 | 0% | 2,239 | 2,270 | +1% | 0 | 0 | — |
case-22 | fail→pass | 19,157 | 3,307 | -83% | 1 | 1 | 0% | 3,755 | 1,908 | -49% | 0 | 0 | — |
case-23 | pass→pass | 4,142 | 2,833 | -32% | 1 | 1 | 0% | 537 | 1,860 | +246% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +70 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.