tdd

tarafından mattpocock

Kırmızı-yeşil-yeniden düzenleme döngüsüyle test odaklı geliştirme. Kullanıcı TDD kullanarak özellik geliştirmek veya hata düzeltmek istediğinde, "kırmızı-yeşil-yeniden düzenleme"den bahsettiğinde, entegrasyon testleri istediğinde veya test-ilk geliştirme talep ettiğinde kullanılır.

npx skills add https://github.com/mattpocock/skills --skill tdd

Test-Driven Development

TDD is the red → green loop. This skill is the reference that makes that loop produce tests worth keeping: what a good test is, where tests go, the anti-patterns, and the rules of the loop. Every section applies on every cycle — consult them before and during the loop, not after.

When exploring the codebase, read CONTEXT.md (if it exists) so test names and interface vocabulary match the project's domain language, and respect ADRs in the area you're touching.

What a good test is

Tests verify behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't. A good test reads like a specification — "user can checkout with valid cart" tells you exactly what capability exists — and survives refactors because it doesn't care about internal structure.

See tests.md for examples and mocking.md for mocking guidelines.

Seams — where tests go

A seam is the public boundary you test at: the interface where you observe behavior without reaching inside. Tests live at seams, never against internals.

Test only at pre-agreed seams. Before writing any test, write down the seams under test and confirm them with the user. No test is written at an unconfirmed seam. You can't test everything — agreeing the seams up front is how testing effort lands on the critical paths and complex logic instead of every edge case.

Ask: "What's the public interface, and which seams should we test?"

Anti-patterns

  • Implementation-coupled — mocks internal collaborators, tests private methods, or verifies through a side channel (querying the database instead of using the interface). The tell: the test breaks when you refactor but behavior hasn't changed.
  • Tautological — the assertion recomputes the expected value the way the code does (expect(add(a, b)).toBe(a + b), a snapshot derived by hand the same way, a constant asserted equal to itself), so it passes by construction and can never disagree with the code. Expected values must come from an independent source of truth — a known-good literal, a worked example, the spec.
  • Horizontal slicing — writing all tests first, then all implementation. Bulk tests verify imagined behavior: you test the shape of things rather than user-facing behavior, the tests go insensitive to real changes, and you commit to test structure before understanding the implementation. Work in vertical slices instead — one test → one implementation → repeat, each test a tracer bullet that responds to what the last cycle taught you.

Rules of the loop

  • Red before green. Write the failing test first, then only enough code to pass it. Don't anticipate future tests or add speculative features.
  • One slice at a time. One seam, one test, one minimal implementation per cycle.
  • Refactoring is not part of the loop. It belongs to the review stage (see the code-review skill), not the red → green implementation cycle.

mattpocock tarafından daha fazla skill

improve-codebase-architecture
mattpocock
Bir kod tabanında derinleşme fırsatlarını bulur; CONTEXT.md dosyasındaki alan diline ve docs/adr/ içindeki kararlara dayanır. Kullanıcı mimariyi iyileştirmek, yeniden düzenleme fırsatları bulmak, sıkı bağlı modülleri birleştirmek veya kod tabanını daha test edilebilir ve yapay zeka tarafından gezilebilir hale getirmek istediğinde kullanılır.
developmentcode-reviewapi
handoff
mattpocock
Mevcut konuşmayı, başka bir agent'ın devralması için bir handoff belgesine sıkıştır.
communicationproject-managementdocument
prototype
mattpocock
Bir tasarımı uygulamaya geçmeden önce geliştirmek için atılabilir bir prototip oluşturun. İki dal arasında yönlendirme yapar — durum/iş mantığı soruları için çalıştırılabilir bir terminal uygulaması veya tek bir rotadan değiştirilebilen birkaç radikal farklı UI varyasyonu. Kullanıcı prototip yapmak, bir veri modelini veya durum makinesini doğrulamak, bir UI taslağı oluşturmak, tasarım seçeneklerini keşfetmek istediğinde veya "bunu prototiple", "oynayayım", "birkaç tasarım dene" dediğinde kullanın.
developmentdesigncreative
triage
mattpocock
Sorunları, triyaj rollerine dayalı bir durum makinesi aracılığıyla sınıflandırır. Kullanıcı bir sorun oluşturmak, sorunları sınıflandırmak, gelen hataları veya özellik taleplerini incelemek, bir AFK ajanı için sorunları hazırlamak veya sorun iş akışını yönetmek istediğinde kullanılır.
developmentproject-managementcommunication
obsidian-vault
mattpocock
Obsidian kasasında notları arayın, oluşturun ve wikilinkler ile dizin notları kullanarak yönetin. Kullanıcı Obsidian'da not bulmak, oluşturmak veya düzenlemek istediğinde kullanın.
productivitydocument
edit-article
mattpocock
Makaleleri bölümleri yeniden yapılandırarak, netliği artırarak ve metni sıkılaştırarak düzenleyin ve geliştirin. Kullanıcı bir makale taslağını düzenlemek, revize etmek veya geliştirmek istediğinde kullanın.
documentcreative
writing-great-skills
mattpocock
İyi beceriler yazma ve düzenleme referansı — bir beceriyi öngörülebilir kılan kelime dağarcığı ve ilkeler.
documentdevelopment
implement
mattpocock
Bir PRD veya bir dizi iş kaydına dayanarak bir iş parçasını uygulayın.
developmentcode-reviewproject-management