calls = []; } public function __call($method, $params): void { $this->calls[] = ["method" => $method, "params" => $params]; } } '); } // Redirect error_log to /dev/null during tests to prevent "PHPUnit controlled exception" clutter ini_set('error_log', '/dev/null'); // Configure Unit tests base with Mockery integration uses(MockeryPHPUnitIntegration::class) ->beforeEach(function (): void { // Unit test setup }) ->in('Unit'); // Configure E2E tests - requires live instance with API access // Run with: ./vendor/bin/pest --testsuite=E2E // Requires APP_URL and TEST_API_KEY environment variables $appUrl = getenv('APP_URL'); $testApiKey = getenv('TEST_API_KEY'); if ($appUrl && $testApiKey) { uses() ->beforeEach(function () use ($appUrl, $testApiKey): void { Tests\Helpers\ApiClient::setBaseUrl($appUrl); Tests\Helpers\ApiClient::setApiKey($testApiKey); }) ->in('E2E'); } // Configure Browser tests - requires live instance with Playwright // Run with: ./vendor/bin/pest --testsuite=Browser // Requires APP_URL environment variable and Playwright installed (npm install playwright) pest()->browser() ->inChrome() ->timeout(10_000); uses(Pest\Browser\Browsable::class)->in('Browser'); /* |-------------------------------------------------------------------------- | Expectations |-------------------------------------------------------------------------- | | When you're writing tests, you often need to check that values meet certain | conditions. The "expect()" function gives you access to a set of useful | expectation methods. | */ expect()->extend('toBeDomain', function (): void { $this->not->toBeEmpty(); expect($this->value)->toBeString(); expect(filter_var($this->value, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME))->not->toBeFalse(); }); expect()->extend('toBeEmail', function (): void { $this->not->toBeEmpty(); expect($this->value)->toBeString(); expect(filter_var($this->value, FILTER_VALIDATE_EMAIL))->not->toBeFalse(); }); expect()->extend('toBeUrl', function (): void { $this->not->toBeEmpty(); expect($this->value)->toBeString(); expect(filter_var($this->value, FILTER_VALIDATE_URL))->not->toBeFalse(); }); expect()->extend('toBeUuid', function (): void { $this->not->toBeEmpty(); expect($this->value)->toBeString(); expect(preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i', $this->value))->toBe(1); }); /* |-------------------------------------------------------------------------- | Functions |-------------------------------------------------------------------------- | | While Pest is very powerful out-of-the-box, you may have some testing code | specific to your project that you don't want to repeat in every file. | Here you can define custom helper functions and expect() extensions. | */