Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Tester Laravel Package

draw/tester

Tools for testing PHP apps: DataTester wraps PHPUnit assertions with a fluent, path-based API for arrays/objects. Includes PHPUnit extensions like CarbonReset to reset Carbon state between tests and SetUpAutowire to autowire test properties via attributes.

View on GitHub
Deep Wiki
Context7

At a glance

Frequently asked questions about Tester
How does DataTester improve Laravel test readability compared to native PHPUnit assertions?
DataTester replaces verbose PHPUnit assertion chains with a fluent, path-based syntax. For example, testing nested arrays or objects becomes cleaner: `$tester->path('[user].address.city')->assertSame('Paris')` instead of multiple `assertArrayHasKey` calls. This aligns with Laravel’s emphasis on expressive code and reduces boilerplate in test suites.
Can I use draw/tester with Laravel’s built-in TestCase classes (e.g., HttpTests, FeatureTests)?
Yes, DataTester works seamlessly with Laravel’s TestCase classes. It integrates with PHPUnit’s core assertions, so you can use it alongside Laravel’s native testing tools like `assertDatabaseHas()` or `assertViewHas()`. The extensions (CarbonReset, SetUpAutowire) require PHPUnit configuration but don’t conflict with Laravel’s testing layers.
What Laravel versions and PHPUnit does draw/tester support?
The package is PHPUnit-agnostic and works with Laravel 8+ (tested with PHPUnit 9+). However, check the [GitHub repo](https://github.com/mpoiriert/tester) for exact compatibility notes, as PHPUnit 10+ may introduce breaking changes. For Laravel 9, ensure your PHPUnit version aligns with the package’s requirements (typically 9.5+).
How do I configure CarbonReset to work with Laravel’s RefreshDatabase trait?
CarbonReset resets Carbon’s static state between tests, which can coexist with Laravel’s `RefreshDatabase` trait. Add the extension to `phpunit.xml` as shown in the docs, but note that `RefreshDatabase` already handles database rollbacks—CarbonReset is useful for testing time-sensitive logic (e.g., `created_at` assertions) without manual `Carbon::setTestNow()`.
Will SetUpAutowire break Laravel’s Mockery or PHPUnit mocking conventions?
SetUpAutowire uses reflection to autowire test properties via attributes, which *can* conflict with Mockery or PHPUnit’s mocking if properties are also mocked. Test this in a sandbox first. For Laravel-specific DI, consider the `draw/tester-bundle` (linked in docs) for tighter container integration, though it’s optional.
Is DataTester safe for testing Eloquent models or API responses in Laravel?
Absolutely. DataTester excels at validating nested structures like Eloquent collections or JSON API responses. For example, you can chain assertions like `$tester->path('[data][0].attributes.name')->assertSame('John')` to test complex relationships. It’s a drop-in replacement for manual `assertArraySubset()` or `assertObjectHasAttribute()` calls.
How do I handle private/protected properties with SetUpAutowire in Laravel?
SetUpAutowire uses reflection to access private/protected properties, which may violate Laravel’s strict OOP practices. If you encounter issues, restrict autowiring to public properties or use Laravel’s `createPartialMock()` for controlled access. The extension is designed for test-only use, so it won’t affect production code.
Are there performance concerns with DataTester or its extensions in large test suites?
DataTester itself adds minimal overhead, as it’s a thin wrapper over PHPUnit. However, SetUpAutowire’s reflection-based autowiring *can* slow down large suites. For performance-critical tests, limit autowiring to essential properties or disable the extension. CarbonReset has negligible impact since it resets Carbon’s static state once per test.
What alternatives exist for fluent data testing in Laravel?
Alternatives include PestPHP’s `assert` helpers (e.g., `assert()->arrayHas('key')`), Laravel’s native assertions, or packages like `spatie/laravel-test-factory`. PestPHP is Laravel-native and integrates with Livewire/Inertia, while `draw/tester` offers a more generic PHPUnit-compatible solution. For Carbon time manipulation, Laravel’s `traits` (e.g., `RefreshDatabase`) or `mocks` are often sufficient.
How do I contribute or report issues for draw/tester?
Check the [GitHub repository](https://github.com/mpoiriert/tester) for contribution guidelines. Issues should include your Laravel/PHPUnit versions, test case snippets, and expected vs. actual behavior. The package appears low-maintenance, so engagement with the author (via GitHub issues or PRs) may be required for feature requests or bug fixes.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
yandex/translate-api
voku/simple_html_dom
league/flysystem-vfs
bkwld/upchuck
filament/spatie-laravel-tags-plugin
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php