senior-qa

Generates unit tests, integration tests, and E2E tests for React/Next.js applications. Scans components to create Jest + React Testing Library test stubs,…

INSTALLATION
npx skills add https://github.com/alirezarezvani/claude-skills --skill senior-qa
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

$28

Tools Overview

1. Test Suite Generator

Scans React/TypeScript components and generates Jest + React Testing Library test stubs with proper structure.

Input: Source directory containing React components

Output: Test files with describe blocks, render tests, interaction tests

Usage:

# Basic usage - scan components and generate tests

python scripts/test_suite_generator.py src/components/ --output __tests__/

# Include accessibility tests

python scripts/test_suite_generator.py src/ --output __tests__/ --include-a11y

# Generate with custom template

python scripts/test_suite_generator.py src/ --template custom-template.tsx

Supported Patterns:

  • Functional components with hooks
  • Components with Context providers
  • Components with data fetching
  • Form components with validation

2. Coverage Analyzer

Parses Jest/Istanbul coverage reports and identifies gaps, uncovered branches, and provides actionable recommendations.

Input: Coverage report (JSON or LCOV format)

Output: Coverage analysis with recommendations

Usage:

# Analyze coverage report

python scripts/coverage_analyzer.py coverage/coverage-final.json

# Enforce threshold (exit 1 if below)

python scripts/coverage_analyzer.py coverage/ --threshold 80 --strict

# Generate HTML report

python scripts/coverage_analyzer.py coverage/ --format html --output report.html

3. E2E Test Scaffolder

Scans Next.js pages/app directory and generates Playwright test files with common interactions.

Input: Next.js pages or app directory

Output: Playwright test files organized by route

Usage:

# Scaffold E2E tests for Next.js App Router

python scripts/e2e_test_scaffolder.py src/app/ --output e2e/

# Include Page Object Model classes

python scripts/e2e_test_scaffolder.py src/app/ --output e2e/ --include-pom

# Generate for specific routes

python scripts/e2e_test_scaffolder.py src/app/ --routes "/login,/dashboard,/checkout"

QA Workflows

Unit Test Generation Workflow

Use when setting up tests for new or existing React components.

Step 1: Scan project for untested components

python scripts/test_suite_generator.py src/components/ --scan-only

Step 2: Generate test stubs

python scripts/test_suite_generator.py src/components/ --output __tests__/

Step 3: Review and customize generated tests

// __tests__/Button.test.tsx (generated)

import { render, screen, fireEvent } from '@testing-library/react';

import { Button } from '../src/components/Button';

describe('Button', () => {

  it('renders with label', () => {

    render(<Button>Click me</Button>);

    expect(screen.getByRole('button', { name: "click-mei-tobeinthedocument"

  });

  it('calls onClick when clicked', () => {

    const handleClick = jest.fn();

    render(<Button onClick={handleClick}>Click</Button>);

    fireEvent.click(screen.getByRole('button'));

    expect(handleClick).toHaveBeenCalledTimes(1);

  });

  // TODO: Add your specific test cases

});

Step 4: Run tests and check coverage

npm test -- --coverage

python scripts/coverage_analyzer.py coverage/coverage-final.json

Coverage Analysis Workflow

Use when improving test coverage or preparing for release.

Step 1: Generate coverage report

npm test -- --coverage --coverageReporters=json

Step 2: Analyze coverage gaps

python scripts/coverage_analyzer.py coverage/coverage-final.json --threshold 80

Step 3: Identify critical paths

python scripts/coverage_analyzer.py coverage/ --critical-paths

Step 4: Generate missing test stubs

python scripts/test_suite_generator.py src/ --uncovered-only --output __tests__/

Step 5: Verify improvement

npm test -- --coverage

python scripts/coverage_analyzer.py coverage/ --compare previous-coverage.json

E2E Test Setup Workflow

Use when setting up Playwright for a Next.js project.

Step 1: Initialize Playwright (if not installed)

npm init playwright@latest

Step 2: Scaffold E2E tests from routes

python scripts/e2e_test_scaffolder.py src/app/ --output e2e/

Step 3: Configure authentication fixtures

// e2e/fixtures/auth.ts (generated)

import { test as base } from '@playwright/test';

export const test = base.extend({

  authenticatedPage: async ({ page }, use) => {

    await page.goto('/login');

    await page.fill('[name="email"]', 'test@example.com');

    await page.fill('[name="password"]', 'password');

    await page.click('button[type="submit"]');

    await page.waitForURL('/dashboard');

    await use(page);

  },

});

Step 4: Run E2E tests

npx playwright test

npx playwright show-report

Step 5: Add to CI pipeline

# .github/workflows/e2e.yml

- name: "run-e2e-tests"

  run: npx playwright test

- name: "upload-report"

  uses: actions/upload-artifact@v3

  with:

    name: "playwright-report"

    path: playwright-report/

Reference Documentation

File

Contains

Use When

references/testing_strategies.md

Test pyramid, testing types, coverage targets, CI/CD integration

Designing test strategy

references/test_automation_patterns.md

Page Object Model, mocking (MSW), fixtures, async patterns

Writing test code

references/qa_best_practices.md

Testable code, flaky tests, debugging, quality metrics

Improving test quality

Common Patterns Quick Reference

React Testing Library Queries

// Preferred (accessible)

screen.getByRole('button', { name: "submiti"

screen.getByLabelText(/email/i)

screen.getByPlaceholderText(/search/i)

// Fallback

screen.getByTestId('custom-element')

Async Testing

// Wait for element

await screen.findByText(/loaded/i);

// Wait for removal

await waitForElementToBeRemoved(() => screen.queryByText(/loading/i));

// Wait for condition

await waitFor(() => {

  expect(mockFn).toHaveBeenCalled();

});

Mocking with MSW

import { rest } from 'msw';

import { setupServer } from 'msw/node';

const server = setupServer(

  rest.get('/api/users', (req, res, ctx) => {

    return res(ctx.json([{ id: 1, name: "john" }]));

  })

);

beforeAll(() => server.listen());

afterEach(() => server.resetHandlers());

afterAll(() => server.close());

Playwright Locators

// Preferred

page.getByRole('button', { name: "submit" })

page.getByLabel('Email')

page.getByText('Welcome')

// Chaining

page.getByRole('listitem').filter({ hasText: 'Product' })

Coverage Thresholds (jest.config.js)

module.exports = {

  coverageThreshold: {

    global: {

      branches: 80,

      functions: 80,

      lines: 80,

      statements: 80,

    },

  },

};

Common Commands

# Jest

npm test                           # Run all tests

npm test -- --watch                # Watch mode

npm test -- --coverage             # With coverage

npm test -- Button.test.tsx        # Single file

# Playwright

npx playwright test                # Run all E2E tests

npx playwright test --ui           # UI mode

npx playwright test --debug        # Debug mode

npx playwright codegen             # Generate tests

# Coverage

npm test -- --coverage --coverageReporters=lcov,json

python scripts/coverage_analyzer.py coverage/coverage-final.json
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card