mohamedhekal/testharness

Laravel/Pest testing utilities: time travel, queue asserts, API envelope asserts, and lightweight architecture checks

Maintainers

Package info

github.com/mohamedhekal/testharness

pkg:composer/mohamedhekal/testharness

Transparency log

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-07-16 14:23 UTC

This package is auto-updated.

Last update: 2026-07-16 14:35:25 UTC


README

CI License: MIT PHP Laravel

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