Install
$ agentstack add skill-cor-incorporated-claude-code-skills-tdd-workflow ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
TDD Workflow
Enforce test-driven development: write tests first, implement to pass, then refactor.
The Cycle: RED -> GREEN -> REFACTOR
RED: Write Failing Tests
Define expected behavior before writing any implementation:
describe('searchMarkets', () => {
it('returns relevant markets for query', async () => {
const results = await searchMarkets('election')
expect(results).toHaveLength(5)
expect(results[0].relevanceScore).toBeGreaterThan(0.8)
})
it('returns empty array for no matches', async () => {
const results = await searchMarkets('zzz_nonexistent')
expect(results).toEqual([])
})
it('handles empty query gracefully', async () => {
const results = await searchMarkets('')
expect(results).toEqual([])
})
})
Run tests -- they MUST fail:
npm test -- --run [test-file]
GREEN: Write Minimal Implementation
Write just enough code to make all tests pass. No more.
npm test -- --run [test-file]
# All tests should now pass
REFACTOR: Improve While Green
Improve code quality with tests as safety net:
- Remove duplication
- Improve naming
- Optimize performance
- Extract helpers
Run tests after each change to confirm nothing broke.
Test Types and When to Use
| Type | What to Test | Tool | Speed Target | |------|-------------|------|-------------| | Unit | Single function/class, pure logic | Vitest/Jest |
Coverage Requirement
Target 80%+ across all metrics:
npm run test:coverage
Check branches, functions, lines, and statements individually.
Testing Rules
- Test behavior, not implementation
- WRONG:
expect(component.state.count).toBe(5) - RIGHT:
expect(screen.getByText('Count: 5')).toBeInTheDocument()
- Each test is independent -- set up own data, no shared mutable state
- Use semantic selectors
- WRONG:
page.click('.css-xyz') - RIGHT:
page.click('[data-testid="submit"]')orpage.click('button:has-text("Submit")')
- Mock external dependencies -- isolate the unit under test
- Test edge cases -- null, undefined, empty, boundary values, error paths
- Arrange-Act-Assert structure in every test
Mocking Patterns
Database/ORM
vi.mock('@/lib/prisma', () => ({
prisma: { user: { findUnique: vi.fn() } }
}))
External APIs
vi.mock('@/lib/external-api', () => ({
fetchData: vi.fn(() => Promise.resolve({ data: 'mocked' }))
}))
Error Handling
- If tests pass immediately (no RED phase): the test is not testing anything meaningful. Add assertions that verify specific behavior.
- If coverage is below 80%: run
npm run test:coverageand check the uncovered lines report. Add tests for missed branches. - If E2E tests are flaky: replace
waitForTimeoutwithwaitForSelectororexpect().toBeVisible(). Never use fixed timeouts. - If mocks leak between tests: add
vi.restoreAllMocks()inafterEachor usevi.mockat module level. - If tests are slow (unit > 50ms): check for unmocked network calls or missing test isolation.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Cor-Incorporated
- Source: Cor-Incorporated/claude-code-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.