rtk-tdd

Enforces TDD (Red-Green-Refactor) for Rust development. Auto-triggers on implementation, testing, refactoring, and bug fixing tasks. Provides Rust-idiomatic testing patterns with anyhow/thiserror, cfg(test), and Arrange-Act-Assert workflow.

By rtk-ai · 1,637 installs

npx skills add rtk-ai/rtk --skill rtk-tdd

Source repository · Upstream listing

Rust TDD Workflow Three Laws of TDD 1. Do NOT write production code without a failing test 2. Write only enough test to fail (including compilation failure) 3. Write only enough production code to pass the failing test Cycle: RED (test fails) GREEN (minimum to pass) REFACTOR (cleanup, cargo test) Red Green Refactor Steps Never skip step 2. If the test passes immediately, it tests nothing. Idiomatic Rust Test Patterns Pattern Usage When Arrange Act Assert Base structure for every test Always assert eq! / assert! Direct comparison / booleans Deterministic values assert!(result.is err()) Error path testing Invalid inputs Result<() return type Tests with ? operator Fallible functions [should panic] Expected panic Invariants, preconditions tempfile::NamedTempFile File/I/O tests Filesystem dependent code Patterns by Code Type Code Type Test Pattern Example Pure function (str str) Input literal assert output assert eq!(truncate("hello", 3), "...") Parsing/filtering Raw string filter contains/not contains assert!(filter(raw).contains("expected")) Validation/security Boundary inputs assert bool assert!(!is valid("../etc/passwd")) Error handling Bad input is err() assert!(parse("garbage").is err()) Struct/enum roundtrip Construct serialize deserialize eq assert eq!(from str(to str(x)), x) Naming Convention Examples: test truncate edge case , test parse invalid input , test filter empty string When NOT to Use Pure TDD Functions calling Command::new() test the parser, not the execution std::process::exit() refactor to Result first, then test the Result Direct I/O (SQLite, network) use tempfile/mock or test the pure logic separately Main/CLI wiring covered by integration/smoke tests Pre Commit Gate All 3 must pass. No exceptions. No [allow(...)] without documented justification.