vusys/laravel-runabout
Runabout is journey testing for Laravel: define the steps of a user journey once, and it executes them in randomised-but-deterministic orders, checking your invariants after every step to catch bugs.
Journey testing for Laravel: define the steps of a user journey once, and Runabout executes them in randomised-but-deterministic orders, checking your invariants after every step. It exists to catch the bugs that unit, feature, and browser tests all miss — the ones that only appear when real users do things in an order you never thought to test.
📚 Full documentation: vusys.github.io/laravel-runabout
final class PostLifecycleTest extends TestCase
{
use RunsJourneys;
public function test_post_lifecycle(): void
{
$this->journey(PostLifecycleJourney::class)->shuffles(25)->run();
}
}
One journey definition becomes twenty-six executions: the declared order, then twenty-five seeded shuffles that respect your constraints. When a shuffle fails, the seed reproduces the exact trail — and Runabout shrinks it to the smallest reproduction before reporting it.
composer require --dev vusys/laravel-runabout
No service provider to register and nothing to publish — Runabout is a test-only trait you mix into a test case.
Add the RunsJourneys trait to a test case, define a Journey, and run it. The Quick start guide walks through a complete example; the short version is:
use Vusys\Runabout\RunsJourneys;
final class PostLifecycleTest extends TestCase
{
use RunsJourneys;
public function test_post_lifecycle(): void
{
$this->journey(PostLifecycleJourney::class)->shuffles(25)->run();
}
}
Full docs live at vusys.github.io/laravel-runabout. By topic:
| Topic | Page |
|---|---|
| Why it exists and how it works | Introduction |
| Installing and wiring it in | Installation |
| A complete worked example | Quick start |
| The vocabulary | Core concepts |
| The step DSL | Defining steps |
| Trail state and seeded randomness | The context |
| Driving the app as named users | Actors & HTTP |
| Shuffling the clock | Time travel |
| Properties checked after every step | Invariants |
| shuffles / repeatHeavy / exhaustive / seed | Execution modes |
| Cross-actor and multi-tenant bugs | Interleaving journeys |
| Fresh state between trails | Resetting state |
| Seeds, artifacts, and shrinking | Reproducing failures |
| Seeing what the shuffler explored | Trails & coverage |
The RUNABOUT_* settings |
Environment variables |
MIT. See LICENSE.
How can I help you explore Laravel packages today?