test-generation
Test Generation
Overview
Generate comprehensive tests following TDD principles and project testing standards. Runs in isolated test-engineer context with pre-loaded testing conventions.
Announce at start: "I'm using the test-generation skill to create tests for [feature/component]."
The Process
Step 1: Specify Test Requirements
Provide clear requirements to test-engineer:
/test-generation
Feature: JWT token validation middleware
Behaviors:
1. Valid token → allow request
2. Expired token → reject with 401
3. Invalid signature → reject with 401
4. Missing token → reject with 401
Coverage: All critical paths
Testing Standards (pre-loaded):
- Framework: vitest
- Mocks: vi.mock()
- Structure: AAA pattern
Step 2: Review Test Plan
Test-engineer proposes a test plan:
## Test Plan
Behaviors:
1. Valid token
- ✅ Positive: Allow request with valid JWT
- ❌ Negative: Reject malformed JWT
2. Expired token
- ✅ Positive: Normal token works
- ❌ Negative: Expired token rejected with 401
Mocking Strategy:
- JWT verification: Mock with vi.mock()
- Request/Response: Use test doubles
Coverage Target: 95% line coverage, all critical paths
IMPORTANT: Review and approve before implementation proceeds.
Step 3: Implement Tests
Test-engineer implements following AAA pattern (Arrange-Act-Assert):
describe('JWT Middleware', () => {
it('allows request with valid token', () => {
// Arrange
const req = mockRequest({ headers: { authorization: 'Bearer valid.jwt.token' } });
// Act
const result = jwtMiddleware(req);
// Assert
expect(result.authorized).toBe(true);
});
});
Step 4: Run Self-Review
Test-engineer verifies:
- ✅ Positive AND negative tests for each behavior
- ✅ AAA pattern followed
- ✅ All external dependencies mocked
- ✅ Tests are deterministic (no flakiness)
- ✅ Standards compliance
Step 5: Run Tests
Execute test suite and verify all pass:
npm test -- jwt.middleware.test.ts
Step 6: Return Results
status: success
tests_written: 8
coverage:
lines: 96%
branches: 93%
functions: 100%
behaviors_tested:
- name: "Valid token handling"
positive_tests: 2
negative_tests: 2
test_results:
passed: 8
failed: 0
deliverables:
- "src/auth/jwt.middleware.test.ts"
TDD Workflow
For test-driven development, invoke BEFORE implementation:
/test-generation
Write tests for user registration endpoint (not yet implemented):
Expected Behavior:
- POST /api/register with valid data → 201 + user object
- POST /api/register with duplicate email → 409 error
- POST /api/register with invalid email → 400 error
Note: Implementation does not exist. Write tests that define expected behavior.
Tests will fail initially—use them as spec to guide implementation.
Error Handling
Tests don't match project conventions:
- Main agent must pre-load
.opencode/context/core/standards/tests.md
Missing edge cases:
- Specify explicitly in requirements
Flaky tests:
- Ensure all external dependencies mocked
Red Flags
If you think any of these, STOP and re-read this skill:
- "The implementation is simple enough that tests aren't needed"
- "I'll just write the happy path tests for now"
- "Mocking is too complex for this dependency"
- "I'll add tests after the feature is stable"
Common Rationalizations
| Excuse | Reality |
|---|---|
| "It's too simple to break" | Simple code breaks in simple ways. Tests document the contract, not just catch bugs. |
| "Negative tests are obvious failures, not worth writing" | Negative tests are where bugs hide. "Obviously fails" is not the same as "correctly fails". |
| "Mocking this dependency is too hard" | Hard-to-mock dependencies are a design smell. Mock them anyway and note the smell. |
| "Tests slow down delivery" | Tests without negative cases give false confidence. False confidence slows delivery more. |
Remember
- Pre-load testing standards BEFORE invoking skill
- Specify clear behaviors and acceptance criteria
- Review test plan before implementation
- Both positive AND negative tests required
- All external dependencies MUST be mocked (no real network/DB calls)
- AAA pattern (Arrange-Act-Assert) mandatory
- Tests must be deterministic (no randomness or time dependencies)
Related
- code-execution
- code-review
- context-discovery
More from darrenhinde/openagentscontrol
smart-router-skill
Movie character personality skill with configurable missions - choose your character and watch themed workflows unfold
20task-management
Task management CLI for tracking and managing feature subtasks with status, dependencies, and validation
17context7
Retrieve up-to-date documentation for software libraries, frameworks, and components via the Context7 API. This skill should be used when looking up documentation for any programming library or framework, finding code examples for specific APIs or features, verifying correct usage of library functions, or obtaining current information about library APIs that may have changed since training.
10debugger
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
8using-oac
Use when starting any conversation — establishes how to find and use OAC skills, requiring Skill tool invocation BEFORE ANY response including clarifying questions, this is your secret weapon to best perform your tasks
8code-review
Use when code has been written and needs validation before committing, or when the user asks for a code review or security check.
8