Claude-skill-registry generate-qa-test-cases
Generate QA test cases in Traditional Chinese from project code analysis.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/generate-qa-test-cases" ~/.claude/skills/majiayu000-claude-skill-registry-generate-qa-test-cases && rm -rf "$T"
skills/data/generate-qa-test-cases/SKILL.mdGenerate QA Test Cases
Analyze project code and generate comprehensive test cases for QA testing.
Important: Reports should be written in Traditional Chinese.
Arguments
- Target path to analyze (e.g.,$ARGUMENTS
)libs/mxsecurity/account-page
Analysis Process
Step 1: Locate and Read Files
Read all relevant files from the target path:
- TypeScript files (components, services, models)**/*.ts
- Template files**/*.html
- Data models**/*.model.ts
- Constants and definitions**/*.def.ts
- API service files**/*.api.ts
Step 2: Extract Form Fields and Validation Rules
From TypeScript files, extract:
-
Form Group Definitions
orthis.fb.group({...})new FormGroup({...})this.fb.nonNullable.group({...})
-
Form Controls with Validators
usageValidators.*
usageOneValidators.*- Custom validators
-
Conditional Validators
/setValidators()
callsclearValidators()- Dynamic validation logic
Output Format:
## Form Fields and Validation Rules ### Form: {formName} | Field Name | Type | Required | Validators | Conditions | | ---------- | -------- | -------- | ------------------------------------------ | ---------------- | | username | text | Yes | required, maxLength(32), pattern(alphanum) | Always | | password | password | Yes | required, minLength(8), complexity | Create mode only |
Step 3: Extract Error Messages
From HTML templates, extract:
-
mat-error elements
- Error conditions (
/*ngIf
)@if - Translation keys for error messages
- Error conditions (
-
Error message mappings
→ messagehasError('required')
→ messagehasError('minlength')- Custom error keys
-
oneUiFormError directive usage
- Auto-generated error messages
Output Format:
## Validation Error Messages ### Field: {fieldName} | Validation Rule | Error Condition | Error Message (Translation Key) | | --------------- | ----------------------- | ----------------------------------- | | required | `hasError('required')` | `COMMON.VALIDATION.REQUIRED` | | minLength(8) | `hasError('minlength')` | `COMMON.VALIDATION.MIN_LENGTH` | | pattern | `hasError('pattern')` | `ACCOUNT.VALIDATION.INVALID_FORMAT` |
Step 4: Extract Conditional Field Visibility
From templates and components, extract:
-
Conditional rendering
/@if (condition)*ngIf="condition"[hidden]="condition"[disabled]="condition"
-
Mode-based visibility
- Create vs Edit mode differences
- Role-based field visibility
-
Dependent field logic
- Field A value affects Field B visibility
- Cascading selections
Output Format:
## Conditional Field Visibility ### Trigger: {triggerField} = {value} | Affected Field | Visibility | Enabled | Notes | | --------------- | ---------- | ------- | -------------------------------- | | passwordField | Hidden | - | Only shown in create mode | | confirmPassword | Shown | Enabled | Appears when password is entered |
Step 5: Extract API Payload Format
From API service files, extract:
-
POST/PUT endpoints
- Method signatures
- Payload interfaces
-
Request payload structure
- Required fields
- Optional fields
- Field types
-
Data transformations
- Form data → API payload mapping
Output Format:
## API Payload Format ### Endpoint: POST /auth/accountSet #### Create Account (mode: 1) ```json { "userName": "string (required)", "mode": 1, "userEnable": "number (0|1)", "authority": "number (1|2)", "new_pw": "string (required)", "confirm_pw": "string (required)" } ```
Edit Account (mode: 2)
{ "userName": "string (required)", "mode": 2, "userEnable": "number (0|1)", "authority": "number (1|2)" }
### Step 6: Generate Boundary Test Cases Based on extracted validation rules, generate test cases: 1. **String Length Boundaries** - minLength: test with (min-1), min, (min+1) - maxLength: test with (max-1), max, (max+1) 2. **Numeric Range Boundaries** - min: test with (min-1), min, (min+1) - max: test with (max-1), max, (max+1) 3. **Pattern Validation** - Valid pattern examples - Invalid pattern examples - Edge cases (empty, special chars) 4. **Required Fields** - Empty string - Whitespace only - Null/undefined **Output Format:** ```markdown ## Boundary Test Cases ### Field: username | Test Case ID | Input Value | Expected Result | Validation Rule | |--------------|-------------|-----------------|-----------------| | TC-USER-001 | "" (empty) | Error: Required | required | | TC-USER-002 | " " (spaces) | Error: Required | required | | TC-USER-003 | "a" (1 char) | Error: Min length | minLength(4) | | TC-USER-004 | "abcd" (4 chars) | Valid | minLength(4) | | TC-USER-005 | "a".repeat(32) | Valid | maxLength(32) | | TC-USER-006 | "a".repeat(33) | Error: Max length | maxLength(32) | | TC-USER-007 | "user@123" | Error: Invalid char | pattern(alphanum) | | TC-USER-008 | "user_123" | Valid | pattern(alphanum) |
Step 7: Generate Interaction Test Cases
Based on conditional visibility and mode logic:
-
Mode Switching
- Create mode field states
- Edit mode field states
- Transition between modes
-
Dependent Fields
- Trigger field changes
- Expected field state changes
-
Form Submission
- Valid submission
- Partial validation errors
- Server error handling
Output Format:
## Interaction Test Cases ### Scenario: Create New Account | Step | Action | Expected Result | | ---- | ------------------------------------ | ---------------------------------- | | 1 | Click "Create" button | Dialog opens with empty form | | 2 | Leave all fields empty, click Submit | Show required errors on all fields | | 3 | Enter username "admin" | Show "username exists" error | | 4 | Enter valid username | Error clears | | 5 | Enter password "123" | Show "min length" error | | 6 | Enter password "ValidPass1!" | Error clears | | 7 | Enter mismatched confirm password | Show "password mismatch" error | | 8 | Enter matching confirm password | Error clears | | 9 | Click Submit | Account created, dialog closes |
Output
Generate a comprehensive test case document at:
{target}/domain/src/lib/docs/QA-TEST-CASES.md
Document Structure
# QA Test Cases - {Feature Name} Generated: {current_date} Source: {target_path} ## Table of Contents 1. [Form Fields and Validation Rules](#form-fields-and-validation-rules) 2. [Validation Error Messages](#validation-error-messages) 3. [Conditional Field Visibility](#conditional-field-visibility) 4. [API Payload Format](#api-payload-format) 5. [Boundary Test Cases](#boundary-test-cases) 6. [Interaction Test Cases](#interaction-test-cases) --- {Generated sections from Steps 2-7}
Notes
- Reports should be written in Traditional Chinese
- Focus on extracting actual validation rules from code, not assumptions
- Include translation keys for error messages to help QA verify correct text
- Cross-reference form field names with API payload field names
- Highlight any discrepancies between form validation and API expectations