droids-test-patterns
[DROIDS-INTERNAL] Testing patterns and best practices. Only activate when invoked by droids plugin agents (test-engineer) or /droids:* commands. Do NOT auto-activate in regular conversations.
What this skill does
# Testing Patterns & Best Practices
Use these patterns when writing tests for code changes.
## Test Structure (AAA Pattern)
```javascript
describe('Feature', () => {
it('should do something specific', () => {
// Arrange - Set up test data and conditions
const input = createTestInput();
// Act - Execute the code under test
const result = functionUnderTest(input);
// Assert - Verify the expected outcome
expect(result).toBe(expectedValue);
});
});
```
## Test Categories
### Unit Tests
- Test individual functions/methods in isolation
- Mock external dependencies
- Fast execution (< 100ms per test)
- High coverage of edge cases
### Integration Tests
- Test component interactions
- Use real dependencies where practical
- Test API endpoints end-to-end
- Verify database operations
### E2E Tests
- Test complete user workflows
- Run in browser environment
- Cover critical user journeys
- Slower but high confidence
## Test Naming Convention
```
[Unit/Feature] should [expected behavior] when [condition]
```
Examples:
- `UserService should throw error when email is invalid`
- `LoginForm should display error message when credentials are wrong`
- `API should return 401 when token is expired`
## Coverage Requirements
| Type | Minimum Coverage |
|------|------------------|
| Unit Tests | 80% line coverage |
| Integration Tests | Critical paths covered |
| E2E Tests | Main user journeys |
## Common Test Patterns
### Testing Async Code
```javascript
it('should handle async operations', async () => {
const result = await asyncFunction();
expect(result).toBeDefined();
});
```
### Testing Error Cases
```javascript
it('should throw on invalid input', () => {
expect(() => functionUnderTest(null)).toThrow('Invalid input');
});
```
### Testing API Endpoints
```javascript
it('should return user data', async () => {
const response = await request(app)
.get('/api/users/1')
.expect(200);
expect(response.body).toHaveProperty('id', 1);
});
```
### Mocking Dependencies
```javascript
jest.mock('./database');
const mockDb = require('./database');
mockDb.query.mockResolvedValue([{ id: 1 }]);
```
## Test Quality Checklist
- [ ] Tests are deterministic (no flakiness)
- [ ] Tests are isolated (no shared state)
- [ ] Tests are fast (< 1s for unit tests)
- [ ] Tests have clear assertions
- [ ] Tests cover edge cases
- [ ] Tests cover error scenarios
- [ ] Tests use meaningful names
- [ ] Tests don't test implementation details
## Framework-Specific Patterns
### React Testing Library
```javascript
import { render, screen, fireEvent } from '@testing-library/react';
test('submits form with user data', async () => {
render(<LoginForm />);
fireEvent.change(screen.getByLabelText('Email'), {
target: { value: '[email protected]' }
});
fireEvent.click(screen.getByRole('button', { name: 'Submit' }));
await screen.findByText('Success');
});
```
### Python pytest
```python
import pytest
def test_function_returns_expected():
result = my_function(input_data)
assert result == expected_output
@pytest.mark.parametrize("input,expected", [
(1, 2),
(2, 4),
(3, 6),
])
def test_multiply_by_two(input, expected):
assert multiply_by_two(input) == expected
```
Related in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.