grazulex/laravel-tddraft
最新稳定版本:v1.2.0
Composer 安装命令:
composer require --dev grazulex/laravel-tddraft
包简介
A powerful Laravel package that provides LaravelTddraft functionality with modern PHP 8.3+ features.
关键字:
README 文档
README
A Laravel package that enables safe Test-Driven Development with isolated draft testing, unique reference tracking, and powerful filtering options for professional TDD workflows.
📖 Table of Contents
- Overview
- ✨ Features
- 📦 Installation
- 🚀 Quick Start
- 🔧 Five-Command TDD Workflow
- 🔍 Filter and Group Options
- 📚 Documentation
- 💡 Examples
- 🧪 Testing
- 🔧 Requirements
- 🤝 Contributing
- 🔒 Security
- 📄 License
Overview
Laravel TDDraft enables true Test-Driven Development in Laravel applications by providing a separate, isolated testing environment where you can practice the Red-Green-Refactor cycle without affecting your CI pipeline or breaking team builds.
The key innovation is the five-command workflow that separates experimental draft tests from production tests, with powerful filtering and status tracking to manage your TDD process professionally.
🏗️ Test Architecture & Isolation
Laravel TDDraft creates a completely separate testing environment that doesn't interfere with your existing test suite:
tests/
├── Feature/ # 🟢 Your production CI tests (unchanged)
├── Unit/ # 🟢 Your production CI tests (unchanged)
└── TDDraft/ # 🔵 Isolated draft tests (new - never affects CI)
├── Feature/ # Draft feature tests
├── Unit/ # Draft unit tests
└── .status.json # Status tracking (auto-generated)
Key Architectural Benefits:
- 🚫 Zero CI Interference: TDDraft tests in
tests/TDDraft/are completely excluded from your main test suites - 🔄 Independent Operation: Your existing
tests/Unit/andtests/Feature/continue working exactly as before - 📋 Separate Test Suites: PHPUnit/Pest configuration keeps TDDraft isolated via test suite definitions
- ⚡ Parallel Development: Teams can practice TDD in the draft environment while CI runs production tests
How Isolation Works:
Standard PHPUnit/Pest Configuration:
<testsuites> <testsuite name="Unit"> <directory suffix="Test.php">tests/Unit</directory> <!-- Production tests --> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">tests/Feature</directory> <!-- Production tests --> </testsuite> <!-- tests/TDDraft/ is intentionally NOT included --> </testsuites>
TDDraft Tests Run Separately:
# Your CI pipeline (unchanged) pest # Runs only tests/Unit + tests/Feature phpunit # Runs only tests/Unit + tests/Feature # TDDraft workflow (isolated) php artisan tdd:test # Runs only tests/TDDraft/** pest --testsuite=tddraft # Alternative access to draft tests
This architectural separation ensures that failing TDDraft tests never break your CI builds while you practice the Red-Green-Refactor cycle.
🎯 Why Laravel TDDraft?
TDD is hard to practice in real projects because:
- Writing failing tests breaks CI builds and affects the team
- Experimental tests clutter your main test suite
- There's no easy way to track test evolution during TDD cycles
- Promoting draft tests to production requires manual work
Laravel TDDraft solves these problems with:
- ✅ Isolated Draft Testing - Separate test environment that never affects CI
- ✅ Unique Reference Tracking - Every test gets a trackable ID for evolution monitoring
- ✅ Powerful Filtering - Advanced options to filter tests by type, path, status, and reference
- ✅ Status Tracking - Automatic monitoring of test results and history
- ✅ Automated Promotion - Easy graduation from draft to production tests
- ✅ Professional Workflow - Structured five-command process for TDD adoption
✨ Features
- 🏗️ Complete Test Isolation -
tests/TDDraft/directory completely separate fromtests/Unit/andtests/Feature/- never affects CI - 🔖 Unique Reference Tracking - Every test gets a
tdd-YYYYMMDDHHMMSS-RANDOMID for precise tracking - 🔍 Advanced Filtering - Filter tests by type, path, reference, status, and more
- 📊 Automatic Status Tracking - Monitor test results and history during TDD cycles
- 🎯 Professional Test Management - List, filter, and manage draft tests with detailed views
- 🚀 Automated Promotion - Graduate mature tests to CI suite with preserved audit trails
- 🔄 True TDD Workflow - Safe Red-Green-Refactor cycles without breaking builds
- 📋 Group-Based Organization - Pest groups for flexible test filtering and execution
- ⚡ Five-Command Simplicity - Complete TDD workflow with just five intuitive commands
- 🧪 Zero Interference Design - Your existing Unit/Feature tests continue working unchanged
📦 Installation
Install the package via Composer:
composer require grazulex/laravel-tddraft --dev
💡 Auto-Discovery
The service provider will be automatically registered thanks to Laravel's package auto-discovery.
Publish configuration:
php artisan vendor:publish --tag=tddraft-config
🚀 Quick Start
1. Initialize TDDraft Environment
php artisan tdd:init
This sets up the isolated draft testing environment with PHPUnit/Pest configuration.
2. Create Your First Draft Test
php artisan tdd:make "User can register"
Creates a draft test with unique reference tracking:
/** * TDDraft Test: User can register * Reference: tdd-20250727142530-Abc123 * Type: feature */ it('user can register', function (): void { // TODO: Implement your test scenario here expect(true)->toBeTrue('Replace this with your actual test implementation'); }) ->group('tddraft', 'feature', 'tdd-20250727142530-Abc123');
3. Run Draft Tests with Filtering
# Run all draft tests php artisan tdd:test # Filter by test name php artisan tdd:test --filter="user registration" # Run with coverage php artisan tdd:test --coverage
4. Manage Tests with Advanced Filtering
# List all draft tests php artisan tdd:list # Filter by type php artisan tdd:list --type=feature # Filter by path php artisan tdd:list --path=Auth # Show detailed view with status information php artisan tdd:list --details
5. Promote Mature Tests to CI Suite
# Find reference from listing php artisan tdd:list # Promote specific test php artisan tdd:promote tdd-20250727142530-Abc123
🔧 Five-Command TDD Workflow
Laravel TDDraft is built around a structured five-command workflow that enables professional TDD practice:
1. tdd:init - Setup Phase
php artisan tdd:init
- Creates
tests/TDDraft/directory structure - Configures PHPUnit/Pest for isolated draft testing
- Sets up status tracking system
2. tdd:make - Red Phase (Create Failing Tests)
php artisan tdd:make "Feature description" [options]
Options:
--type=feature|unit- Specify test type (default: feature)--path=Auth/Api- Custom subdirectory path--class=CustomTestName- Custom class name
Creates draft test with unique tracking reference.
3. tdd:test - Green Phase (Run and Iterate)
php artisan tdd:test [options]
Options:
--filter="test name"- Filter tests by name pattern--coverage- Generate coverage report--parallel- Run tests in parallel--stop-on-failure- Stop on first failure
Runs draft tests with automatic status tracking.
4. tdd:list - Review Phase (Manage Tests)
php artisan tdd:list [options]
Options:
--type=feature|unit- Filter by test type--path=directory- Filter by directory path--details- Show detailed view with status history
View and filter all draft tests with their current status.
5. tdd:promote - Graduation Phase (Move to CI)
php artisan tdd:promote <reference> [options]
Options:
--target=Feature|Unit- Target directory override--new-file=TestName- Custom file name--class=ClassName- Custom class name--keep-draft- Keep original draft file--force- Overwrite without confirmation
Promotes mature tests to main test suite with audit trail preservation.
🔍 Filter and Group Options
Laravel TDDraft provides powerful filtering capabilities across all commands:
Command-Specific Filters
tdd:list Command Filters
# Filter by test type php artisan tdd:list --type=feature php artisan tdd:list --type=unit # Filter by directory path php artisan tdd:list --path=Auth php artisan tdd:list --path=Api/V1 # Show detailed view with status history php artisan tdd:list --details # Combine filters php artisan tdd:list --type=feature --path=Auth --details
tdd:test Command Filters
# Filter by test name pattern php artisan tdd:test --filter="user registration" php artisan tdd:test --filter="login" # Filter by specific reference php artisan tdd:test --filter="tdd-20250727142530-Abc123" # Run with additional options php artisan tdd:test --filter="api" --coverage --parallel
Pest Group System
Every draft test is automatically tagged with multiple groups for flexible filtering:
it('user can register', function (): void { // Test implementation }) ->group('tddraft', 'feature', 'tdd-20250727142530-Abc123');
Group Types:
tddraft- Identifies all TDDraft testsfeature/unit- Test type classificationtdd-YYYYMMDDHHMMSS-RANDOM- Unique reference for individual test tracking
Direct Pest Filtering:
# Run only draft tests (all) pest --testsuite=tddraft # Run only feature draft tests pest --testsuite=tddraft --group=feature # Run only unit draft tests pest --testsuite=tddraft --group=unit # Run specific test by reference pest --testsuite=tddraft --group=tdd-20250727142530-Abc123 # Run multiple groups pest --testsuite=tddraft --group=feature,unit
Status-Based Management
Use the status tracking system to filter by test stability:
# List tests and check their status php artisan tdd:list --details # Example output shows status information: # 📊 ✅ Passed - Ready for promotion # 📊 ❌ Failed - Needs attention # 📊 ⏭️ Skipped - Review implementation # 📊 🎯 Promoted - Already moved to CI
Reference-Based Operations
Each test gets a unique reference for precise operations:
# Create test (generates reference) php artisan tdd:make "User login validation" # Output: Reference: tdd-20250727142530-Abc123 # Run specific test by reference php artisan tdd:test --filter="tdd-20250727142530-Abc123" # Promote specific test php artisan tdd:promote tdd-20250727142530-Abc123 # List to find references php artisan tdd:list | grep "tdd-"
Advanced Filtering Examples
# Find all authentication-related tests php artisan tdd:list --path=Auth --details # Run only feature tests for API php artisan tdd:test --filter="api" pest --testsuite=tddraft --group=feature | grep -i api # Batch operations on specific test types php artisan tdd:list --type=unit | grep "✅ Passed" # Find unit tests ready for promotion # Status tracking analysis php artisan tdd:list --details | grep "❌ Failed" # Find tests needing attention
📚 Documentation
For detailed documentation, examples, and advanced usage, please visit our comprehensive wiki:
🌟 Complete Documentation & Examples Wiki
Quick Links:
- � Full Documentation
- 🚀 Quick Start Guide
- 🔧 Configuration
- 💡 Advanced Examples
- 🎯 Best Practices
- 🧪 Test Templates
- 📊 Coverage & Reporting
💡 Examples
Basic TDD Workflow
# 1. Setup (one-time) php artisan tdd:init # 2. Create failing test (Red phase) php artisan tdd:make "User can register with valid email" # 3. Run tests and implement code (Green phase) php artisan tdd:test --filter="register" # 4. List and manage your tests php artisan tdd:list --details # 5. Promote stable tests to CI php artisan tdd:promote tdd-20250727142530-Abc123
Advanced Usage
For comprehensive examples including:
- Real-world TDD workflows
- Advanced filtering techniques
- Team collaboration patterns
- Integration with CI/CD
- Performance optimization
👉 Visit our Examples Wiki
🧪 Testing
Laravel TDDraft follows its own philosophy - all tests are organized using the TDD workflow with complete isolation between test environments:
Test Architecture
tests/
├── Feature/ # Package's production tests (for CI)
├── Unit/ # Package's production tests (for CI)
└── TDDraft/ # Draft tests (isolated, never affects CI)
Running Tests
# Install dependencies composer install # Run the main CI test suite (production tests only) pest # Runs tests/Unit + tests/Feature pest --coverage # With coverage for production tests # Run specific production test groups pest --group=unit # Unit tests only pest --group=feature # Feature tests only # TDDraft workflow (completely separate) php artisan tdd:test # Runs only tests/TDDraft/** tests php artisan tdd:list # Manage draft tests
Test Isolation Benefits
For Package Development:
- Production tests (
tests/Unit/,tests/Feature/) ensure package stability - CI pipeline only runs production tests - never broken by experimental code
- Draft tests demonstrate package capabilities without affecting main suite
For Package Users:
- Your existing
tests/Unit/andtests/Feature/remain unchanged - TDDraft adds
tests/TDDraft/for safe TDD practice - No interference between production and draft test environments
Writing Tests for This Package
If you're contributing to Laravel TDDraft itself, follow the same TDD principles:
- Write failing tests first
- Implement minimal code to make them pass
- Refactor while keeping tests green
The package tests itself using the standard Laravel/Pest approach, while providing TDDraft workflow for users.
🔧 Requirements
- PHP: ^8.3
- Laravel: ^12.0
- Pest: ^3.0 (for testing framework)
Optional Dependencies
- PHPUnit: ^11.0 (alternative to Pest)
- Docker: For containerized development (optional)
🤝 Contributing
We welcome contributions! Please see our Contributing Guide for details.
🔒 Security
If you discover a security vulnerability, please review our Security Policy before disclosing it.
📄 License
Laravel TDDraft is open-sourced software licensed under the MIT license.
Made with ❤️ for the Laravel community
Resources
Community Links
- CODE_OF_CONDUCT.md - Our code of conduct
- CONTRIBUTING.md - How to contribute
- SECURITY.md - Security policy
- RELEASES.md - Release notes and changelog
统计信息
- 总下载量: 13
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-07-18
