directorytree/dummy
directorytree/dummy is a Laravel/PHP package providing a lightweight dummy/test utility for generating placeholder data and fixtures. Useful for local development, demos, and automated tests where realistic sample content is needed quickly and consistently.
Installation:
composer require directorytree/dummy
No Laravel-specific dependencies (since v1.1.0), so works in any PHP project.
Basic Usage:
use DirectoryTree\Dummy\Dummy;
$dummy = new Dummy();
$fakeData = $dummy->make('User', ['name' => 'John Doe', 'email' => 'john@example.com']);
'User' with your model/class name.First Use Case: Generate fake test data for a model:
$users = $dummy->times(5)->make('User');
Model Factories:
// Define a factory for a model (e.g., `app/Models/User.php`)
$dummy->factory('User', function () {
return [
'name' => 'Fake Name',
'email' => 'fake@example.com',
];
});
// Generate data
$user = $dummy->make('User');
Dynamic States (Laravel HasFactory Integration):
$dummy->state('User', 'admin', [
'role' => 'admin',
'is_active' => true,
]);
$admin = $dummy->state('User', 'admin')->make();
Collections:
$users = $dummy->times(10)->make('User'); // Array of 10 users
$users = $dummy->times(10)->sequence('User'); // Sequenced data
Custom Logic:
$dummy->factory('Order', function () {
return [
'amount' => fn() => rand(10, 1000),
'status' => fn() => ['pending', 'shipped', 'delivered'][rand(0, 2)],
];
});
Laravel Models:
Use with Laravel’s Factory trait for consistency:
use Illuminate\Database\Eloquent\Factories\HasFactory;
class User extends Model {
use HasFactory;
}
state() method aligns with Laravel’s factory states.Testing:
Replace Laravel’s factory() with Dummy for non-Laravel projects:
$dummy = new Dummy();
$fakePost = $dummy->make('Post', ['title' => 'Test Post']);
Sequencing: Generate incremental data:
$dummy->sequence('User', function ($index) {
return ['name' => "User $index", 'email' => "user$index@example.com"];
});
Dependency Injection:
Bind Dummy to a container (e.g., Laravel’s IoC):
$app->bind(Dummy::class, fn() => new Dummy());
No Laravel Dependency (Post-v1.1.0):
Arr::random()). Use PHP’s native functions or Illuminate\Support\Arr if available.$randomItem = Arr::random(['a', 'b', 'c']); // Requires `use Illuminate\Support\Arr;`
Factory Overrides:
factory() calls overwrite earlier ones for the same class. Use state() for variations.Closure Scope:
// ❌ Avoid (uses external $counter)
$dummy->factory('Item', fn() => ['id' => $counter++]);
// ✅ Use closure args
$dummy->sequence('Item', fn($index) => ['id' => $index]);
Laravel 12+ Compatibility:
Model::factory() changes). Dummy may not mirror all updates.Inspect Factories:
$dummy->getFactories(); // Returns all registered factories.
Clear Factories:
$dummy->clearFactories(); // Reset all factories.
Log Output: Enable verbose logging for debugging:
$dummy->setVerbose(true);
Custom Helpers: Extend with your own data generation logic:
$dummy->addHelper('fakeName', fn() => 'Helper Name');
$dummy->factory('User', ['name' => $dummy->fakeName()]);
Plugin System: Create reusable factory sets:
class UserFactories {
public function __invoke(Dummy $dummy) {
$dummy->factory('User', [...]);
$dummy->state('User', 'admin', [...]);
}
}
// Usage:
$dummy = (new Dummy())->extend(new UserFactories());
Mocking: Use for mocking dependencies in tests:
$dummy->factory('Service', fn() => [
'method' => fn() => 'mocked_result',
]);
How can I help you explore Laravel packages today?