通过测试驱动开发流程编写新功能、修复缺陷并安全重构代码。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "tdd-workflow" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/docs/ko-KR/skills/tdd-workflow/SKILL.md 2. 保存为 ~/.claude/skills/tdd-workflow/SKILL.md 3. 装好后重载技能,告诉我可以用了
请用测试驱动开发方式实现“用户可按标签筛选任务”功能。先编写单元测试、集成测试和必要的 E2E 测试,再给出最小实现代码,目标覆盖率至少 80%,并说明每一步如何通过测试推进实现。
一套按 TDD 顺序组织的测试用例、最小可运行实现代码,以及覆盖率与实现步骤说明。
这个接口在空数组输入时会报错。请先为该缺陷编写失败的回归测试,再修复问题,并补充相关单元测试和集成测试,确保类似边界情况不会再次出现,整体覆盖率保持在 80% 以上。
包含失败回归测试、修复后的代码、补充测试,以及对问题根因和验证结果的简要说明。
请对这段遗留模块进行重构,提高可读性和可维护性。先补齐现有行为的测试保护网,包括单元测试、集成测试和关键 E2E 场景;确认测试通过后再逐步重构,并展示重构前后差异。
覆盖现有行为的测试集、分步骤重构方案、重构后代码,以及行为未变的验证说明。
이 스킬은 모든 코드 개발이 포괄적인 테스트 커버리지와 함께 TDD 원칙을 따르도록 보장합니다.
항상 테스트를 먼저 작성한 후, 테스트를 통과시키는 코드를 구현합니다.
As a [role], I want to [action], so that [benefit]
Example:
As a user, I want to search for markets semantically,
so that I can find relevant markets even without exact keywords.
각 사용자 여정에 대해 포괄적인 테스트 케이스를 작성합니다:
describe('Semantic Search', () => {
it('returns relevant markets for query', async () => {
// Test implementation
})
it('handles empty query gracefully', async () => {
// Test edge case
})
it('falls back to substring search when Redis unavailable', async () => {
// Test fallback behavior
})
it('sorts results by similarity score', async () => {
// Test sorting logic
})
})
npm test
# Tests should fail - we haven't implemented yet
테스트를 통과시키기 위한 최소한의 코드를 작성합니다:
// Implementation guided by tests
export async function searchMarkets(query: string) {
// Implementation here
}
npm test
# Tests should now pass
테스트가 통과하는 상태를 유지하면서 코드 품질을 개선합니다:
npm run test:coverage
# Verify 80%+ coverage achieved
import { render, screen, fireEvent } from '@testing-library/react'
import { Button } from './Button'
describe('Button Component', () => {
it('renders with correct text', () => {
render(<Button>Click me</Button>)
expect(screen.getByText('Click me')).toBeInTheDocument()
})
it('calls onClick when clicked', () => {
const handleClick = jest.fn()
render(<Button onClick={handleClick}>Click</Button>)
fireEvent.click(screen.getByRole('button'))
expect(handleClick).toHaveBeenCalledTimes(1)
})
it('is disabled when disabled prop is true', () => {
render(<Button disabled>Click</Button>)
expect(screen.getByRole('button')).toBeDisabled()
})
})
import { NextRequest } from 'next/server'
import { GET } from './route'
describe('GET /api/markets', () => {
it('returns markets successfully', async () => {
const request = new NextRequest('http://localhost/api/markets')
const response = await GET(request)
const data = await response.json()
expect(response.status).toBe(200)
expect(data.success).toBe(true)
expect(Array.isArray(data.data)).toBe(true)
})
it('validates query parameters', async () => {
const request = new NextRequest('http://localhost/api/markets?limit=invalid')
const response = await GET(request)
expect(response.status).toBe(400)
})
it('handles database errors gracefully', async () => {
// Mock database failure
const request = new NextRequest('http://localhost/api/markets')
// Test error handling
})
})
import { test, expect } from '@playwright/test'
test('user can search and filter markets', async ({ page }) => {
// Navigate to markets page
await page.goto('/')
await page.click('a[href="/markets"]')
// Verify page loaded
await expect(page.locator('h1')).toContainText('Markets')
// Search for markets
await page.fill('input[placeholder="Search markets"]', 'election')
// Wait for stable search results instead of sleeping
const results = page.locator('[data-testid="market-card"]')
await expect(results.first()).toBeVisible({ timeout: 5000 })
…
帮助开发者为代码代理配置性能优化、安全防护与研究优先工作流。
提供数据库迁移、回滚与零停机发布的最佳实践指导,适用于多种 ORM 与 SQL 数据库。
通过双评审智能体对结果进行对抗式校验,提升输出发布前的可靠性
帮助你掌握地道 Rust 模式、所有权与并发实践,编写安全高性能应用。
基于 C++ Core Guidelines 编写、审查并重构更安全现代的 C++ 代码。
为 Claude Code 会话提供系统化校验流程,帮助检查结果正确性与质量。
通过测试驱动开发流程,为新功能、修复和重构生成高覆盖测试与实现方案。
在开发新功能、修复缺陷或重构时,按测试驱动流程生成高覆盖测试与代码。
用测试驱动开发流程编写新功能、修复缺陷并安全重构代码。
通过测试驱动开发流程,先写测试再实现功能或修复缺陷。
用测试驱动方式编写流程文档,先验证再成稿,提升技能说明的可靠性。
通过先写失败测试再实现代码,帮助稳定完成功能开发与缺陷修复。