{
  "schemaVersion": "1.0",
  "item": {
    "slug": "senior-qa",
    "name": "Senior Qa",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/alirezarezvani/senior-qa",
    "canonicalUrl": "https://clawhub.ai/alirezarezvani/senior-qa",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/senior-qa",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=senior-qa",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "references/qa_best_practices.md",
      "references/test_automation_patterns.md",
      "references/testing_strategies.md",
      "scripts/coverage_analyzer.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/senior-qa"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/senior-qa",
    "agentPageUrl": "https://openagent3.xyz/skills/senior-qa/agent",
    "manifestUrl": "https://openagent3.xyz/skills/senior-qa/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/senior-qa/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Senior QA Engineer",
        "body": "Test automation, coverage analysis, and quality assurance patterns for React and Next.js applications."
      },
      {
        "title": "Quick Start",
        "body": "# Generate Jest test stubs for React components\npython scripts/test_suite_generator.py src/components/ --output __tests__/\n\n# Analyze test coverage from Jest/Istanbul reports\npython scripts/coverage_analyzer.py coverage/coverage-final.json --threshold 80\n\n# Scaffold Playwright E2E tests for Next.js routes\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/"
      },
      {
        "title": "1. Test Suite Generator",
        "body": "Scans React/TypeScript components and generates Jest + React Testing Library test stubs with proper structure.\n\nInput: Source directory containing React components\nOutput: Test files with describe blocks, render tests, interaction tests\n\nUsage:\n\n# Basic usage - scan components and generate tests\npython scripts/test_suite_generator.py src/components/ --output __tests__/\n\n# Include accessibility tests\npython scripts/test_suite_generator.py src/ --output __tests__/ --include-a11y\n\n# Generate with custom template\npython scripts/test_suite_generator.py src/ --template custom-template.tsx\n\nSupported Patterns:\n\nFunctional components with hooks\nComponents with Context providers\nComponents with data fetching\nForm components with validation"
      },
      {
        "title": "2. Coverage Analyzer",
        "body": "Parses Jest/Istanbul coverage reports and identifies gaps, uncovered branches, and provides actionable recommendations.\n\nInput: Coverage report (JSON or LCOV format)\nOutput: Coverage analysis with recommendations\n\nUsage:\n\n# Analyze coverage report\npython scripts/coverage_analyzer.py coverage/coverage-final.json\n\n# Enforce threshold (exit 1 if below)\npython scripts/coverage_analyzer.py coverage/ --threshold 80 --strict\n\n# Generate HTML report\npython scripts/coverage_analyzer.py coverage/ --format html --output report.html"
      },
      {
        "title": "3. E2E Test Scaffolder",
        "body": "Scans Next.js pages/app directory and generates Playwright test files with common interactions.\n\nInput: Next.js pages or app directory\nOutput: Playwright test files organized by route\n\nUsage:\n\n# Scaffold E2E tests for Next.js App Router\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/\n\n# Include Page Object Model classes\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/ --include-pom\n\n# Generate for specific routes\npython scripts/e2e_test_scaffolder.py src/app/ --routes \"/login,/dashboard,/checkout\""
      },
      {
        "title": "Unit Test Generation Workflow",
        "body": "Use when setting up tests for new or existing React components.\n\nStep 1: Scan project for untested components\n\npython scripts/test_suite_generator.py src/components/ --scan-only\n\nStep 2: Generate test stubs\n\npython scripts/test_suite_generator.py src/components/ --output __tests__/\n\nStep 3: Review and customize generated tests\n\n// __tests__/Button.test.tsx (generated)\nimport { render, screen, fireEvent } from '@testing-library/react';\nimport { Button } from '../src/components/Button';\n\ndescribe('Button', () => {\n  it('renders with label', () => {\n    render(<Button>Click me</Button>);\n    expect(screen.getByRole('button', { name: \"click-mei-tobeinthedocument\"\n  });\n\n  it('calls onClick when clicked', () => {\n    const handleClick = jest.fn();\n    render(<Button onClick={handleClick}>Click</Button>);\n    fireEvent.click(screen.getByRole('button'));\n    expect(handleClick).toHaveBeenCalledTimes(1);\n  });\n\n  // TODO: Add your specific test cases\n});\n\nStep 4: Run tests and check coverage\n\nnpm test -- --coverage\npython scripts/coverage_analyzer.py coverage/coverage-final.json"
      },
      {
        "title": "Coverage Analysis Workflow",
        "body": "Use when improving test coverage or preparing for release.\n\nStep 1: Generate coverage report\n\nnpm test -- --coverage --coverageReporters=json\n\nStep 2: Analyze coverage gaps\n\npython scripts/coverage_analyzer.py coverage/coverage-final.json --threshold 80\n\nStep 3: Identify critical paths\n\npython scripts/coverage_analyzer.py coverage/ --critical-paths\n\nStep 4: Generate missing test stubs\n\npython scripts/test_suite_generator.py src/ --uncovered-only --output __tests__/\n\nStep 5: Verify improvement\n\nnpm test -- --coverage\npython scripts/coverage_analyzer.py coverage/ --compare previous-coverage.json"
      },
      {
        "title": "E2E Test Setup Workflow",
        "body": "Use when setting up Playwright for a Next.js project.\n\nStep 1: Initialize Playwright (if not installed)\n\nnpm init playwright@latest\n\nStep 2: Scaffold E2E tests from routes\n\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/\n\nStep 3: Configure authentication fixtures\n\n// e2e/fixtures/auth.ts (generated)\nimport { test as base } from '@playwright/test';\n\nexport const test = base.extend({\n  authenticatedPage: async ({ page }, use) => {\n    await page.goto('/login');\n    await page.fill('[name=\"email\"]', 'test@example.com');\n    await page.fill('[name=\"password\"]', 'password');\n    await page.click('button[type=\"submit\"]');\n    await page.waitForURL('/dashboard');\n    await use(page);\n  },\n});\n\nStep 4: Run E2E tests\n\nnpx playwright test\nnpx playwright show-report\n\nStep 5: Add to CI pipeline\n\n# .github/workflows/e2e.yml\n- name: \"run-e2e-tests\"\n  run: npx playwright test\n- name: \"upload-report\"\n  uses: actions/upload-artifact@v3\n  with:\n    name: \"playwright-report\"\n    path: playwright-report/"
      },
      {
        "title": "Reference Documentation",
        "body": "FileContainsUse Whenreferences/testing_strategies.mdTest pyramid, testing types, coverage targets, CI/CD integrationDesigning test strategyreferences/test_automation_patterns.mdPage Object Model, mocking (MSW), fixtures, async patternsWriting test codereferences/qa_best_practices.mdTestable code, flaky tests, debugging, quality metricsImproving test quality"
      },
      {
        "title": "React Testing Library Queries",
        "body": "// Preferred (accessible)\nscreen.getByRole('button', { name: \"submiti\"\nscreen.getByLabelText(/email/i)\nscreen.getByPlaceholderText(/search/i)\n\n// Fallback\nscreen.getByTestId('custom-element')"
      },
      {
        "title": "Async Testing",
        "body": "// Wait for element\nawait screen.findByText(/loaded/i);\n\n// Wait for removal\nawait waitForElementToBeRemoved(() => screen.queryByText(/loading/i));\n\n// Wait for condition\nawait waitFor(() => {\n  expect(mockFn).toHaveBeenCalled();\n});"
      },
      {
        "title": "Mocking with MSW",
        "body": "import { rest } from 'msw';\nimport { setupServer } from 'msw/node';\n\nconst server = setupServer(\n  rest.get('/api/users', (req, res, ctx) => {\n    return res(ctx.json([{ id: 1, name: \"john\" }]));\n  })\n);\n\nbeforeAll(() => server.listen());\nafterEach(() => server.resetHandlers());\nafterAll(() => server.close());"
      },
      {
        "title": "Playwright Locators",
        "body": "// Preferred\npage.getByRole('button', { name: \"submit\" })\npage.getByLabel('Email')\npage.getByText('Welcome')\n\n// Chaining\npage.getByRole('listitem').filter({ hasText: 'Product' })"
      },
      {
        "title": "Coverage Thresholds (jest.config.js)",
        "body": "module.exports = {\n  coverageThreshold: {\n    global: {\n      branches: 80,\n      functions: 80,\n      lines: 80,\n      statements: 80,\n    },\n  },\n};"
      },
      {
        "title": "Common Commands",
        "body": "# Jest\nnpm test                           # Run all tests\nnpm test -- --watch                # Watch mode\nnpm test -- --coverage             # With coverage\nnpm test -- Button.test.tsx        # Single file\n\n# Playwright\nnpx playwright test                # Run all E2E tests\nnpx playwright test --ui           # UI mode\nnpx playwright test --debug        # Debug mode\nnpx playwright codegen             # Generate tests\n\n# Coverage\nnpm test -- --coverage --coverageReporters=lcov,json\npython scripts/coverage_analyzer.py coverage/coverage-final.json"
      }
    ],
    "body": "Senior QA Engineer\n\nTest automation, coverage analysis, and quality assurance patterns for React and Next.js applications.\n\nQuick Start\n# Generate Jest test stubs for React components\npython scripts/test_suite_generator.py src/components/ --output __tests__/\n\n# Analyze test coverage from Jest/Istanbul reports\npython scripts/coverage_analyzer.py coverage/coverage-final.json --threshold 80\n\n# Scaffold Playwright E2E tests for Next.js routes\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/\n\nTools Overview\n1. Test Suite Generator\n\nScans React/TypeScript components and generates Jest + React Testing Library test stubs with proper structure.\n\nInput: Source directory containing React components Output: Test files with describe blocks, render tests, interaction tests\n\nUsage:\n\n# Basic usage - scan components and generate tests\npython scripts/test_suite_generator.py src/components/ --output __tests__/\n\n# Include accessibility tests\npython scripts/test_suite_generator.py src/ --output __tests__/ --include-a11y\n\n# Generate with custom template\npython scripts/test_suite_generator.py src/ --template custom-template.tsx\n\n\nSupported Patterns:\n\nFunctional components with hooks\nComponents with Context providers\nComponents with data fetching\nForm components with validation\n2. Coverage Analyzer\n\nParses Jest/Istanbul coverage reports and identifies gaps, uncovered branches, and provides actionable recommendations.\n\nInput: Coverage report (JSON or LCOV format) Output: Coverage analysis with recommendations\n\nUsage:\n\n# Analyze coverage report\npython scripts/coverage_analyzer.py coverage/coverage-final.json\n\n# Enforce threshold (exit 1 if below)\npython scripts/coverage_analyzer.py coverage/ --threshold 80 --strict\n\n# Generate HTML report\npython scripts/coverage_analyzer.py coverage/ --format html --output report.html\n\n3. E2E Test Scaffolder\n\nScans Next.js pages/app directory and generates Playwright test files with common interactions.\n\nInput: Next.js pages or app directory Output: Playwright test files organized by route\n\nUsage:\n\n# Scaffold E2E tests for Next.js App Router\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/\n\n# Include Page Object Model classes\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/ --include-pom\n\n# Generate for specific routes\npython scripts/e2e_test_scaffolder.py src/app/ --routes \"/login,/dashboard,/checkout\"\n\nQA Workflows\nUnit Test Generation Workflow\n\nUse when setting up tests for new or existing React components.\n\nStep 1: Scan project for untested components\n\npython scripts/test_suite_generator.py src/components/ --scan-only\n\n\nStep 2: Generate test stubs\n\npython scripts/test_suite_generator.py src/components/ --output __tests__/\n\n\nStep 3: Review and customize generated tests\n\n// __tests__/Button.test.tsx (generated)\nimport { render, screen, fireEvent } from '@testing-library/react';\nimport { Button } from '../src/components/Button';\n\ndescribe('Button', () => {\n  it('renders with label', () => {\n    render(<Button>Click me</Button>);\n    expect(screen.getByRole('button', { name: \"click-mei-tobeinthedocument\"\n  });\n\n  it('calls onClick when clicked', () => {\n    const handleClick = jest.fn();\n    render(<Button onClick={handleClick}>Click</Button>);\n    fireEvent.click(screen.getByRole('button'));\n    expect(handleClick).toHaveBeenCalledTimes(1);\n  });\n\n  // TODO: Add your specific test cases\n});\n\n\nStep 4: Run tests and check coverage\n\nnpm test -- --coverage\npython scripts/coverage_analyzer.py coverage/coverage-final.json\n\nCoverage Analysis Workflow\n\nUse when improving test coverage or preparing for release.\n\nStep 1: Generate coverage report\n\nnpm test -- --coverage --coverageReporters=json\n\n\nStep 2: Analyze coverage gaps\n\npython scripts/coverage_analyzer.py coverage/coverage-final.json --threshold 80\n\n\nStep 3: Identify critical paths\n\npython scripts/coverage_analyzer.py coverage/ --critical-paths\n\n\nStep 4: Generate missing test stubs\n\npython scripts/test_suite_generator.py src/ --uncovered-only --output __tests__/\n\n\nStep 5: Verify improvement\n\nnpm test -- --coverage\npython scripts/coverage_analyzer.py coverage/ --compare previous-coverage.json\n\nE2E Test Setup Workflow\n\nUse when setting up Playwright for a Next.js project.\n\nStep 1: Initialize Playwright (if not installed)\n\nnpm init playwright@latest\n\n\nStep 2: Scaffold E2E tests from routes\n\npython scripts/e2e_test_scaffolder.py src/app/ --output e2e/\n\n\nStep 3: Configure authentication fixtures\n\n// e2e/fixtures/auth.ts (generated)\nimport { test as base } from '@playwright/test';\n\nexport const test = base.extend({\n  authenticatedPage: async ({ page }, use) => {\n    await page.goto('/login');\n    await page.fill('[name=\"email\"]', 'test@example.com');\n    await page.fill('[name=\"password\"]', 'password');\n    await page.click('button[type=\"submit\"]');\n    await page.waitForURL('/dashboard');\n    await use(page);\n  },\n});\n\n\nStep 4: Run E2E tests\n\nnpx playwright test\nnpx playwright show-report\n\n\nStep 5: Add to CI pipeline\n\n# .github/workflows/e2e.yml\n- name: \"run-e2e-tests\"\n  run: npx playwright test\n- name: \"upload-report\"\n  uses: actions/upload-artifact@v3\n  with:\n    name: \"playwright-report\"\n    path: playwright-report/\n\nReference Documentation\nFile\tContains\tUse When\nreferences/testing_strategies.md\tTest pyramid, testing types, coverage targets, CI/CD integration\tDesigning test strategy\nreferences/test_automation_patterns.md\tPage Object Model, mocking (MSW), fixtures, async patterns\tWriting test code\nreferences/qa_best_practices.md\tTestable code, flaky tests, debugging, quality metrics\tImproving test quality\nCommon Patterns Quick Reference\nReact Testing Library Queries\n// Preferred (accessible)\nscreen.getByRole('button', { name: \"submiti\"\nscreen.getByLabelText(/email/i)\nscreen.getByPlaceholderText(/search/i)\n\n// Fallback\nscreen.getByTestId('custom-element')\n\nAsync Testing\n// Wait for element\nawait screen.findByText(/loaded/i);\n\n// Wait for removal\nawait waitForElementToBeRemoved(() => screen.queryByText(/loading/i));\n\n// Wait for condition\nawait waitFor(() => {\n  expect(mockFn).toHaveBeenCalled();\n});\n\nMocking with MSW\nimport { rest } from 'msw';\nimport { setupServer } from 'msw/node';\n\nconst server = setupServer(\n  rest.get('/api/users', (req, res, ctx) => {\n    return res(ctx.json([{ id: 1, name: \"john\" }]));\n  })\n);\n\nbeforeAll(() => server.listen());\nafterEach(() => server.resetHandlers());\nafterAll(() => server.close());\n\nPlaywright Locators\n// Preferred\npage.getByRole('button', { name: \"submit\" })\npage.getByLabel('Email')\npage.getByText('Welcome')\n\n// Chaining\npage.getByRole('listitem').filter({ hasText: 'Product' })\n\nCoverage Thresholds (jest.config.js)\nmodule.exports = {\n  coverageThreshold: {\n    global: {\n      branches: 80,\n      functions: 80,\n      lines: 80,\n      statements: 80,\n    },\n  },\n};\n\nCommon Commands\n# Jest\nnpm test                           # Run all tests\nnpm test -- --watch                # Watch mode\nnpm test -- --coverage             # With coverage\nnpm test -- Button.test.tsx        # Single file\n\n# Playwright\nnpx playwright test                # Run all E2E tests\nnpx playwright test --ui           # UI mode\nnpx playwright test --debug        # Debug mode\nnpx playwright codegen             # Generate tests\n\n# Coverage\nnpm test -- --coverage --coverageReporters=lcov,json\npython scripts/coverage_analyzer.py coverage/coverage-final.json"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/alirezarezvani/senior-qa",
    "publisherUrl": "https://clawhub.ai/alirezarezvani/senior-qa",
    "owner": "alirezarezvani",
    "version": "2.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/senior-qa",
    "downloadUrl": "https://openagent3.xyz/downloads/senior-qa",
    "agentUrl": "https://openagent3.xyz/skills/senior-qa/agent",
    "manifestUrl": "https://openagent3.xyz/skills/senior-qa/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/senior-qa/agent.md"
  }
}