wackystudio/laravel-test-watcher
A Laravel package that watches your project files and automatically reruns your tests when code changes, providing fast feedback and streamlining test-driven development. Simple to set up for local workflows and continuous testing.
Architecture fit. Laravel Test Watcher is a developer-productivity tool, not application runtime code. Its likely scope is watching filesystem changes and re-invoking the test runner (PHPUnit/Pest) on save—functionally equivalent to phpunit-watcher, Jest's --watch, or spatie/laravel-artisan-test-watcher-style tooling. That places it entirely in the require-dev layer; it should never appear in a production dependency graph or deployment artifact. Architecturally it is a thin shell around the test harness plus a filesystem-watch loop (likely inotifywait, fswatch, or a polling fallback). There is no meaningful service, data, or contract surface to integrate with, which is both the appeal (low blast radius) and the limitation (low strategic value).
Integration feasibility. Mechanically trivial: a Composer dev dependency plus an Artisan command or watcher binary. The real feasibility question is version compatibility. The last release is 2020-09-29, which predates PHPUnit 9.5+/10/11, PHP 8.1–8.4, and Laravel 9/10/11. Most watch packages of that era break on PHPUnit XML schema changes, deprecations in Symfony\Process, or the removal of Illuminate\Console\Command methods they relied on. Whether it "installs" is not the same as whether it "works" on a current stack.
Technical risk. Low for production, moderate for developer experience. Risks are: (a) abandoned upstream — no security advisories, but also no fixes for PHP/PHPUnit drift; (b) transitive dependency pinning that could conflict with the project's PHPUnit range; (c) watch-loop behavior differs across macOS (FSEvents), Linux (inotify), and Windows (polling), producing inconsistent dev environments; (d) silent breakage—if the watcher fails, engineers just stop using it, which is a slow, quiet adoption loss rather than a loud incident. The 22-star, 0.33-score profile is a strong signal of low maintenance and near-zero community validation.
Key questions. Does it declare support for PHP 8.2+/Laravel 10–11/PHPUnit 10–11, and does that declaration hold under an actual composer update? Does it wrap PHPUnit via subprocess, or does it hook into internals that have since moved? Is the watch mechanism native or a polling fallback, and what is CPU cost at repo scale? Is the repo archived, and are issues/PRs being triaged? Is there a maintained upstream alternative (phpunit-watcher, Pest's built-in --watch, or spatie/laravel-watch) that covers the same need?
Stack fit. Fits a standard Laravel monorepo with Composer and PHPUnit/Pest as the test harness. It does not fit teams already on Pest, which ships first-class watch mode—the package would be redundant there. It also does not fit CI, containerized dev environments without inotify propagation, or Windows-heavy fleets without a polling fallback.
Migration path. Recommended sequencing is: spike in one branch on a current-stack app, composer require --dev wackystudio/laravel-test-watcher, run the watcher against a representative test suite, and record whether it survives a PHP 8.x + PHPUnit 10/11 install and a full edit-save-rerun cycle. If it fails, the fallback is a ~50–150 line internal Artisan command or a composer watch script—cheap enough that the buy-vs-build calculus tilts toward build given the abandonment risk. There is no data or schema migration; rollback is a single composer remove.
Compatibility. Pin to the dev environment only and document the tested PHP/Laravel/PHPUnit matrix in the repo README or an ADR. If version constraints conflict, do not use --ignore-platform-reqs to force it—that masks the exact class of breakage you are trying to detect.
Sequencing. (1) Confirm the team actually wants watch-mode DX and measure current test-loop friction; (2) spike the package; (3) if viable, adopt as a dev-only dependency with a documented pin and an owner; (4) if stalled or broken, pivot to Pest's native watcher or the internal script; (5) set a review date (e.g., 90 days) to reassess given the dormant upstream.
Maintenance. Effectively unmaintained since 2020. The TPM should treat this as a vendored utility, not a supported dependency: budget an internal owner, a pinned version, and a standing line item to replace it at the next PHP or PHPUnit major. Cost of ownership is small in absolute terms but nonzero and permanent, which is disproportionate for a convenience tool.
Support. No vendor. Recourse is reading the source, opening an issue that may never be answered, or forking. That is acceptable for a dev-only utility and unacceptable for anything testers or CI depend on. Keep it out of any pipeline that gates merges.
Scaling. Scales fine—it runs on a developer laptop against one repo, not in a shared environment. The only scaling concern is large suites where full re-runs on save become slow; incremental/filtered watch is the mitigation. No production load, no multi-tenancy, no data-plane implications.
Failure modes. Silent no-op after a PHP/PHPUnit upgrade; watcher process leaking CPU in polling mode; missed file events in Docker/WSL without inotify configuration; subprocess wrapper swallowing nonzero exit codes, which is the dangerous one—if a watcher ever misreports red as green, engineer trust in local tests erodes. Any adoption should verify exit-code propagation explicitly.
Ramp-up. Near zero. Any engineer who has used Jest watch or php artisan serve will be productive in minutes. The onboarding burden is entirely on the maintainer side: documenting the pins, the known-good environment, and the fallback if the package dies.
How can I help you explore Laravel packages today?