Skills Plugins MCP Prompt Model 博客 我的中心

tdd-workflow

Yeni özellikler yazarken, hata düzeltirken veya kod refactor ederken bu skill'i kullanın. Unit, integration ve E2E testlerini içeren %80+ kapsam ile test güdümlü geliştirmeyi zorlar.

DeepseekModel キュレーション済みスキル 品質 優秀 · 90 v1.0.0

取得

https://deepseekmodel.com/api/download.php?id=affaan-m-ecc-docs-tr-skills-tdd-workflow-skill-md&format=skill
ダウンロード .skill 標準形式。system_prompt と model_config を収録し、任意の Agent で利用可能
.skill ファイルの system_prompt フィールドの実際の内容。
name tdd-workflow description Yeni özellikler yazarken, hata düzeltirken veya kod refactor ederken bu skill'i kullanın. Unit, integration ve E2E testlerini içeren %80+ kapsam ile test güdümlü geliştirmeyi zorlar. origin ECC Test Güdümlü Geliştirme İş Akışı Bu skill tüm kod geliştirmenin kapsamlı test kapsamı ile TDD ilkelerini takip etmesini sağlar. Ne Zaman Aktifleştirmelisiniz Yeni özellikler veya fonksiyonellik yazarken Hataları veya sorunları düzeltirken Mevcut kodu refactor ederken API endpoint'leri eklerken Yeni bileşenler oluştururken Temel İlkeler 1. Koddan ÖNCE Testler HER ZAMAN önce testleri yazın, sonra testleri geçmesi için kod uygulayın. 2. Kapsam Gereksinimleri Minimum %80 kapsam (unit + integration + E2E) Tüm uç durumlar kapsanmış Hata senaryoları test edilmiş Sınır koşulları doğrulanmış 3. Test Tipleri Unit Testler Bireysel fonksiyonlar ve yardımcı araçlar Bileşen mantığı Pure fonksiyonlar Yardımcılar ve utilities Integration Testler API endpoint'leri Veritabanı operasyonları Service etkileşimleri Harici API çağrıları E2E Testler (Playwright) Kritik kullanıcı akışları Tam iş akışları Tarayıcı otomasyonu UI etkileşimleri TDD İş Akışı Adımları Adım 1: Kullanıcı Hikayeleri Yazın [Rol] olarak, [eylem] yapmak istiyorum, böylece [fayda] elde ederim Örnek: Kullanıcı olarak, marketleri semantik olarak aramak istiyorum, böylece tam anahtar kelimeler olmasa bile ilgili marketleri bulabilirim. Adım 2: Test Senaryoları Oluşturun Her kullanıcı hikayesi için kapsamlı test senaryoları oluşturun: describe ( 'Semantik Arama' , () => { it ( 'sorgu için ilgili marketleri döndürür' , async () => { // Test implementasyonu }) it ( 'boş sorguyu zarif şekilde işler' , async () => { // Uç durumu test et }) it ( 'Redis kullanılamazsa substring aramaya geri döner' , async () => { // Fallback davranışını test et }) it ( 'sonuçları benzerlik skoruna göre sıralar' , async () => { // Sıralama mantığını test et }) }) Adım 3: Testleri Çalıştırın (Başarısız Olmalı) npm test # Testler başarısız olmalı - henüz implement etmedik Adım 4: Kod Uygulayın Testleri geçmesi için minimal kod yazın: // Testler tarafından yönlendirilen implementasyon export async function searchMarkets ( query : string ) { // Implementasyon buraya } Adım 5: Testleri Tekrar Çalıştırın npm test # Testler artık geçmeli Adım 6: Refactor Edin Testleri yeşil tutarken kod kalitesini iyileştirin: Tekrarı kaldırın İsimlendirmeyi iyileştirin Performansı optimize edin Okunabilirliği artırın Adım 7: Kapsamı Doğrulayın npm run test :coverage # %80+ kapsam sağlandığını doğrula Test Kalıpları Unit Test Kalıbı (Jest/Vitest) import { render, screen, fireEvent } from '@testing-library/react' import { Button } from './Button' describe ( 'Button Bileşeni' , () => { it ( 'doğru metinle render eder' , () => { render ( < Button > Tıkla </ Button > ) expect (screen. getByText ( 'Tıkla' )). toBeInTheDocument () }) it ( 'tıklandığında onClick\'i çağırır' , () => { const handleClick = jest. fn () render ( < Button onClick = {handleClick} > Tıkla </ Button > ) fireEvent. click (screen. getByRole ( 'button' )) expect (handleClick). toHaveBeenCalledTimes ( 1 ) }) it ( 'disabled prop true olduğunda devre dışı kalır' , () => { render ( < Button disabled > Tıkla </ Button > ) expect (screen. getByRole ( 'button' )). toBeDisabled () }) }) API Integration Test Kalıbı import { NextRequest } from 'next/server' import { GET } from './route' describe ( 'GET /api/markets' , () => { it ( 'marketleri başarıyla döndürür' , 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 ( 'query parametrelerini validate eder' , async () => { const request = new NextRequest ( 'http://localhost/api/markets?limit=invalid' ) const response = await GET (request) expect (response. status ). toBe ( 400 ) }) it ( 'veritabanı hatalarını zarif şekilde işler' , async () => { // Veritabanı başarısızlığını mock'la const request = new NextRequest ( 'http://localhost/api/markets' ) // Hata işlemeyi test et }) }) E2E Test Kalıbı (Playwright) import { test, expect } from '@playwright/test' test ( 'kullanıcı marketleri arayabilir ve filtreleyebilir' , async ({ page }) => { // Markets sayfasına git await page. goto ( '/' ) await page. click ( 'a[href="/markets"]' ) // Sayfanın yüklendiğini doğrula await expect (page. locator ( 'h1' )). toContainText ( 'Markets' ) // Marketleri ara await page. fill ( 'input[placeholder="Marketleri ara"]' , 'election' ) // Debounce ve sonuçları bekle await page. waitForTimeout ( 600 ) // Arama sonuçlarının gösterildiğini doğrula const results = page. locator ( '[data-testid="market-card"]' ) await expect (results). toHaveCount ( 5 , { timeout : 5000 }) // Sonuçların arama terimini içerdiğini doğrula const firstResult = results. first () await expect (firstResult). toContainText ( 'election' , { ignoreCase : true }) // Duruma göre filtrele await page. click ( 'button:has-text("Aktif")' ) // Filtrelenmiş sonuçları doğrula await expect (results). toHaveCount ( 3 ) }) test ( 'kullanıcı yeni market oluşturabilir' , async ({ page }) => { // Önce login ol await page. goto ( '/creator-dashboard' ) // Market oluşturma formunu doldur await page. fill ( 'input[name="name"]' , 'Test Market' ) await page. fill ( 'textarea[name="description"]' , 'Test açıklama' ) await page. fill ( 'input[name="endDate"]' , '2025-12-31' ) // Formu gönder await page. click ( 'button[type="submit"]' ) // Başarı mesajını doğrula await expect (page. locator ( 'text=Market başarıyla oluşturuldu' )). toBeVisible () // Market sayfasına yönlendirmeyi doğrula await expect (page). toHaveURL ( /\/markets\/test-market/ ) }) Test Dosya Organizasyonu src/ ├── components/ │ ├── Button/ │ │ ├── Button.tsx │ │ ├── Button.test.tsx # Unit testler │ │ └── Button.stories.tsx # Storybook │ └── MarketCard/ │ ├── MarketCard.tsx │ └── MarketCard.test.tsx ├── app/ │ └── api/ │ └── markets/ │ ├── route.ts │ └── route.test.ts # Integration testler └── e2e/ ├── markets.spec.ts # E2E testler ├── trading.spec.ts └── auth.spec.ts Harici Servisleri Mock'lama Supabase Mock jest. mock ( '@/lib/supabase' , () => ({ supabase : { from : jest. fn ( () => ({ select : jest. fn ( () => ({ eq : jest. fn ( () => Promise . resolve ({ data : [{ id : 1 , name : 'Test Market' }], error : null })) })) })) } })) Redis Mock jest. mock ( '@/lib/redis' , () => ({ searchMarketsByVector : jest. fn ( () => Promise . resolve ([ { slug : 'test-market' , similarity_score : 0.95 } ])), checkRedisHealth : jest. fn ( () => Promise . resolve ({ connected : true })) })) OpenAI Mock jest. mock ( '@/lib/openai' , () => ({ generateEmbedding : jest. fn ( () => Promise . resolve ( new Array ( 1536 ). fill ( 0.1 ) // Mock 1536-boyutlu embedding )) })) Test Kapsamı Doğrulama Kapsam Raporu Çalıştır npm run test :coverage Kapsam Eşikleri { "jest" : { "coverageThresholds" : { "global" : { "branches" : 80 , "functions" : 80 , "lines" : 80 , "statements" : 80 } } } } Kaçınılması Gereken Yaygın Test Hataları FAIL: YANLIŞ: Implementasyon Detaylarını Test Etme // İç state'i test etme expect (component. state . count ). toBe ( 5 ) PASS: DOĞRU: Kullanıcı Tarafından Görünen Davranışı Test Et // Kullanıcıların gördüğünü test et expect (screen. getByText ( 'Sayı: 5' )). toBeInTheDocument () FAIL: YANLIŞ: Kırılgan Selector'lar // Kolayca bozulur await page. click ( '.css-class-xyz' ) PASS: DOĞRU: Semantik Selector'lar // Değişikliklere karşı dayanıklı await page. click ( 'button:has-text("Gönder")' ) await page. click ( '[data-testid="submit-button"]' ) FAIL: YANLIŞ: Test İzolasyonu Yok // Testler birbirine bağımlı test ( 'kullanıcı oluşturur' , () => { /* ... */ }) test ( 'aynı kullanıcıyı günceller' , () => { /* önceki teste bağımlı */ }) PASS: DOĞRU: Bağımsız Testler // Her test kendi verisini hazırlar test ( 'kullanıcı oluşturur' , () => { const user = createTestUser () // Test mantığı }) test ( 'kullanıcı günceller' , () => { const user = createTestUser () // Güncelleme mantığı }) Sürekli Test Geliştirme Sırasında Watch Modu npm test -- --watch # Dosya değişikliklerinde testler otomatik çalışır Pre-Commit Hook # Her commit öncesi çalışır npm test && npm run lint CI/CD Entegrasyonu # GitHub Actions - name: Run Tests run: npm test -- --coverage - name: Upload Coverage uses: codecov/codecov-action@v3 En İyi Uygulamalar Önce Testleri Yaz - Her zaman TDD Test Başına Bir Assert - Tek davranışa odaklan Açıklayıcı Test İsimleri - Neyin test edildiğini açıkla Arrange-Act-Assert - Net test yapısı Harici Bağımlılıkları Mock'la - Unit testleri izole et Uç Durumları Test Et - Null, undefined, boş, büyük Hata Yollarını Test Et - Sadece happy path değil Testleri Hızlı Tut - Unit testler < 50ms her biri Testlerden Sonra Temizle - Yan etki yok Kapsam Raporlarını İncele - Boşlukları tespit et Başarı Metrikleri %80+ kod kapsamı sağlanmış Tüm testler geçiyor (yeşil) Atlanmış veya devre dışı test yok Hızlı test yürütme (< 30s unit testler için) E2E testler kritik kullanıcı akışlarını kapsıyor Testler production'dan önce hataları yakalar Unutmayın : Testler opsiyonel değildir. Güvenli refactoring, hızlı geliştirme ve production güvenilirliği sağlayan güvenlik ağıdırlar.
このスキルを起動するキーワード。クリックでコピーできます。

このスキルにはトリガーワードがありません。

ダウンロードした .skill に含まれるフィールド。
フィールド 説明
formatフォーマット識別子(skill/v1)
skill_idスキル固有 ID
nameスキル名
versionバージョン
description説明
categoryカテゴリ(配列)
trigger_wordsトリガーワード
tagsタグ
sourceソース
source_urlソース URL(本ページ)
exported_atエクスポート日時(ダウンロード毎)
system_promptシステムプロンプト本文
model_configモデル設定:provider / model / temperature / max_tokens / top_p
examplesサンプル
install_guide各プラットフォームの導入説明(Coze / Dify / Claude / カスタム)
同じスキルを各プラットフォーム形式で出力できます。
.skill 標準形式。system_prompt と model_config を収録し、任意の Agent で利用可能 ダウンロード
.skillpro 拡張形式。scripts / tools / dependencies / hooks を含む ダウンロード
.json 純粋な JSON 出力。system_prompt とモデル設定のみ ダウンロード
Coze frontmatter 付き Markdown。Coze へのインポート用 ダウンロード
Dify Dify DSL。アプリ作成後にそのままインポート ダウンロード

每日精选 Skill 推荐,免费送到你邮箱

输入邮箱,每天接收一个精选 AI Agent 技能推荐。完全免费,持续更新。

提交后我们会发送一封确认邮件,点击邮件里的链接才会开始收信。

完全免费,取消任意时间。我们不会发送垃圾邮件。