graham-campbell/testbench-core
Core testing utilities for Laravel packages, maintained by Graham Campbell. Provides lightweight TestBench components compatible with Laravel 8–13, PHP 7.4–8.5, and PHPUnit 9–12 to simplify package test setup and integration.
FacadeTrait: Simplifies facade mocking (e.g., Cache::shouldReceive('get')->once()).ServiceProviderTrait: Streamlines service provider testing (e.g., registersBindings() assertions).MockeryTrait: Extends Mockery for Laravel-specific use cases (e.g., mock('App\Services\PaymentGateway')).assertArraySubset).use statements).MockeryTrait vs. createMock()).^4.3).^3.4) may apply.ServiceProviderTest) using ServiceProviderTrait.MockeryTrait/FacadeTrait.TestCase extends \GrahamCampbell\TestBenchCore\TestCase) for shared traits.| Component | Compatibility | Mitigation |
|---|---|---|
| Laravel 8–13 | ✅ Full support (version-specific traits) | Use ^4.3 for L13, ^4.2 for L12, etc. |
| PHPUnit 9–12 | ✅ Supported; PHPUnit 13 ❌ (volatility) | Pin to ^12.0 if using PHPUnit 13. |
| Mockery | ✅ Required (not PHPUnit’s native mocking) | Add mockery/mockery to composer.json. |
| PHP 7.4–8.5 | ✅ Broad support | Ensure local dev matches CI environment. |
| Custom Test Classes | ⚠️ Potential trait conflicts | Use explicit use or namespace aliases. |
FacadeTrait) in API tests.use GrahamCampbell\TestBenchCore\Traits\FacadeTrait;
class CacheTest extends TestCase {
use FacadeTrait;
public function testCacheRetrieval() {
Cache::shouldReceive('get')->andReturn('value');
// ...
}
}
ServiceProviderTrait).use GrahamCampbell\TestBenchCore\Traits\ServiceProviderTrait;
class UserServiceProviderTest extends TestCase {
use ServiceProviderTrait;
public function testBindings() {
$this->assertBindings([
'user.repository' => UserRepository::class,
]);
}
}
MockeryTrait for complex mocking scenarios.use GrahamCampbell\TestBenchCore\Traits\MockeryTrait;
class PaymentGatewayTest extends TestCase {
use MockeryTrait;
public function testCharge() {
$gateway = $this->mock('App\Services\PaymentGateway');
$gateway->shouldReceive('charge')->once();
}
}
assertArraySubset avoids full array comparisons).How can I help you explore Laravel packages today?