mohamedhekal/testharness
Laravel/Pest testing utilities: time travel, queue asserts, API envelope asserts, and lightweight architecture checks
| Install | |
|---|---|
composer require mohamedhekal/testharness |
|
| PHP: | ^8.2 |
| License: | MIT |
| Last Updated: | Jul 16, 2026 |
| Links: | GitHub · Packagist |
Maintainer: mohamedhekal
TestHarness
Search terms: laravel, pest, testing, phpunit, queue, architecture, php, laravel-package, test-helpers, time-travel, dev-tools.
Laravel/Pest testing utilities: freeze time, assert queues, assert API envelopes, tenant test bags, and lightweight architecture checks.
Installation
composer require mohamedhekal/testharness --dev
Time travel
use Hekal\TestHarness\Support\TimeTravel;
TimeTravel::freeze('2026-01-15 10:00:00');
TimeTravel::travel(hours: 2);
TimeTravel::back();
$value = withFrozenTime('2026-07-01 08:00:00', fn () => now()->toDateString());
Queues
Queue::fake();
QueueAssert::assertPushed(MyJob::class, fn (MyJob $job) => $job->id === 1);
API envelopes
Compatible with ApiForge-style { data, error, meta }:
ApiEnvelopeAssert::assertOk($response);
ApiEnvelopeAssert::assertError($response, 'validation_failed', 422);
Architecture
Architecture::assertStrictTypes(__DIR__.'/../src');
Architecture::assertForbiddenFunctions(__DIR__.'/../src', ['dd', 'dump', 'ray']);
Tenant bag
TenantContext::run(['tenant_id' => 5], function () {
// compose with your tenancy package inside the callback
});
Trait
use Hekal\TestHarness\Concerns\InteractsWithTestHarness;
abstract class TestCase extends \Tests\TestCase
{
use InteractsWithTestHarness;
}
Limitations (v0.1)
- Not a full Pest plugin—helpers + asserts only
- Architecture checks are regex-based, not PHPStan
- Queue asserts require
Queue::fake()first
Testing
composer install && composer test
License
MIT