kirschbaum-development/pest-plugin-realtime
A Pest plugin that brings realtime broadcasting assertions to your Laravel tests, letting you verify events are broadcast instantly over Reverb or Pusher. Write expressive expectations for channels, payloads, and event order without boilerplate setup.
Blocking finding: the package has two incompatible identities. The repository description states the plugin "deterministically test[s] realtime browser behavior, dropped events, and connection recovery with Pest" — i.e. a realtime/broadcast assertion library. The package's own description.md states it "adds live test feedback to Pest, streaming results as each test completes" — i.e. a test-output reporter. These are entirely different products with different dependency graphs, different CI requirements, and different value cases. Until someone resolves this from the source, everything below is conditional. This single ambiguity is more decision-relevant than any other fact in the record.
Architecture fit. Under either reading, this is a dev-only require-dev Pest plugin. It auto-registers via Composer/Pest plugin discovery, ships nothing into the production artifact, and imposes no constraint on application architecture. That is the lowest-risk dependency category available to us. The fit conditions differ sharply, however:
Integration feasibility. Mechanically trivial (composer require --dev, one line). The unknowns are environmental and, in one case, severe:
Event::fake() / Broadcast::fake() already cover assertion needs. If the plugin is an ergonomic wrapper, the value case weakens materially.--parallel output, or CI log parsers? Streaming output from parallel workers can interleave and become unreadable.Technical risk.
Key questions.
description.md from source and from the v0.6.1...v0.6.2 diff. Blocking.--parallel, and does it conflict with our formatters?Stack fit. Adopt only if (a) the repository uses Pest, and (b) the identity question resolves in favor of a capability we actually lack. Treat this as a test-tooling decision, not a platform decision — it is reversible by removing one dev dependency and deleting the tests or config that reference it.
Migration path. No production migration exists. The path is a deliberately small pilot:
--parallel runs.Compatibility. Pin an exact version (0.6.2) for the pilot — pre-1.0 caret ranges are too permissive. Confirm Composer resolves cleanly against our Pest/PHP/Laravel pins, no transitive conflicts, and no forced phpunit.xml restructuring or runner swap. If it pins us to a Pest major we intend to leave, stop.
Sequencing.
Do not gate merges on this package's tests or output until the flake/legibility profile is known. Introduce non-blocking, promote later.
Maintenance. Low on paper — dev-only footprint means no production blast radius, no security-patch urgency, no runtime monitoring. The recurring tax is upgrade review on a pre-1.0 package with uninformative changelogs. Budget a short review per release and assign a named owner so it does not silently rot. Note the asymmetric cost: a breaking minor here can break the entire test suite's ability to boot, which blocks every engineer at once.
Support. Community OSS, no SLA. Kirschbaum is reputable and reachable, but assume best-effort only. Internal ownership is mandatory: someone must be able to read the plugin source and, if it is abandoned, replace it with hand-rolled assertions (realtime reading) or native runner output (reporter reading). Both fallbacks are cheap, which caps the downside.
Scaling. API surface is small and scales fine; CI infrastructure is the constraint under the realtime reading. That means containerized Reverb/Pusher-compatible services, per-worker port isolation, deterministic startup/teardown, and clean process termination — coordination cost that multiplies under parallel execution. Budget CI minutes and pipeline complexity as first-class line items, not footnotes. Under the reporter reading, scaling cost is near zero, but so is the benefit.
Failure modes to watch.
--parallel.Ramp-up. Shallow for engineers already fluent in Pest — the surface is small and idiomatic. The real learning cost is operational: standing up and debugging a realtime server inside CI (realtime reading), or validating output across environments (reporter reading). Estimate roughly a day for the spike and wiring, near-zero per-developer thereafter. Engineers unfamiliar with broadcasting concepts will need context on channels, presence, and auth before any realtime assertions mean anything.
Recommendation. Do not treat v0.6.2 as an approval signal — its changelog carries no decision-grade information, and the package's identity is currently contradicted by its own metadata. Proceed only to Phase 0: resolve what the package does from source, review the diff, and confirm the compatibility matrix. With 1 star and 0 dependents, there is no external evidence to borrow; the adoption case must be built entirely on our own spike results. If Phase 0 shows the package duplicates native Broadcast::fake() capability, or that it is a terminal-output convenience rather than a testing capability, close the evaluation and move on.
How can I help you explore Laravel packages today?