Tdd loop
Test-driven development loop for workflows - write tests first, then implementationFrom its SKILL.md
npx -y skills add mpuig/raw --skill tdd-loopAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.3 KB, 755 tokens by cl100k_base, as published. Nobody here has run it
TDD Loop Skill
Use this skill to follow test-driven development practices for workflow implementation.
TDD Cycle
- Write Test First: Define expected behavior in test.py
- Run Test (Red): Verify test fails with clear error
- Write Implementation: Add minimal code to make test pass
- Run Test (Green): Verify test passes
- Refactor: Clean up code while keeping tests green
- Repeat: Move to next test case
Workflow Testing Pattern
test.py Structure
#!/usr/bin/env python3
"""Tests for workflow."""
from pathlib import Path
from workflow_name import WorkflowClass, WorkflowParams
def test_workflow_basic():
"""Test basic workflow execution."""
params = WorkflowParams()
workflow = WorkflowClass(params, workflow_dir=Path(__file__).parent)
result = workflow.run()
assert result == 0 # Success
# Add more assertions
def test_workflow_with_params():
"""Test workflow with specific parameters."""
params = WorkflowParams(param1="value")
workflow = WorkflowClass(params, workflow_dir=Path(__file__).parent)
result = workflow.run()
assert result == 0
# Verify outputs, side effects, etc.
def test_workflow_error_handling():
"""Test workflow handles errors gracefully."""
params = WorkflowParams(invalid="value")
workflow = WorkflowClass(params, workflow_dir=Path(__file__).parent)
# Should handle error, not crash
result = workflow.run()
assert result != 0 # Non-zero exit code for errors
dry_run.py Testing
The dry run is a form of integration testing with mocks:
#!/usr/bin/env python3
"""Dry run with mock data."""
from raw_runtime import DryRunContext
def mock_external_api(ctx: DryRunContext):
"""Mock API call that would normally fetch real data."""
return {
"data": "mock_value",
"status": "success"
}
def mock_file_write(ctx: DryRunContext):
"""Mock file writing - don't actually write."""
ctx.log("Would write to file: results/output.json")
return True
TDD Benefits
- Clear Requirements: Tests document expected behavior
- Regression Prevention: Existing tests catch breaking changes
- Refactoring Safety: Change internals without breaking API
- Design Feedback: Hard-to-test code signals design issues
When to Use
- Adding new workflow functionality
- Fixing bugs (write failing test, then fix)
- Refactoring existing code
- Integrating new tools
Red-Green-Refactor Example
# 1. RED: Write failing test
def test_fetch_stock_data():
result = fetch_stock_data("AAPL")
assert result["symbol"] == "AAPL"
assert "price" in result
# Run: pytest test.py -k test_fetch (FAILS - function doesn't exist)
# 2. GREEN: Minimal implementation
def fetch_stock_data(symbol: str) -> dict:
return {"symbol": symbol, "price": 150.0} # Hardcoded for now
# Run: pytest test.py -k test_fetch (PASSES)
# 3. REFACTOR: Real implementation
def fetch_stock_data(symbol: str) -> dict:
from tools.yahoo_finance import get_quote
data = get_quote(symbol)
return {"symbol": data.symbol, "price": data.current_price}
# Run: pytest test.py -k test_fetch (PASSES)
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.