Szkodnik niedawno dodał throwsUnless()
metodę w programie Pest v2.24, aby warunkowo zweryfikować wyjątek, jeśli dane wyrażenie logiczne ma wartość false.
Ta metoda jest odpowiednikiem throwIf()
metody, która warunkowo weryfikuje wyjątek, jeśli dane wyrażenie jest prawdziwe:
test('example 1', function () {
// Test that only throws an exception for the mysql driver...
})->throwsIf(DB::getDriverName() === 'mysql', Exception::class, 'MySQL is not supported.');
test('example 2', function () {
// Test that throws unless the db driver is mysql...
})->throwsUnless(DB::getDriverName() === 'mysql', SomeDBException::class);
Załóżmy na przykład, że masz pakiet PHP, który obsługuje różne rozszerzenia PHP do manipulowania obrazami. Środowisko ciągłej integracji może obsługiwać i testować zarówno igd
, jak i ; jednak inne środowiska mogą obsługiwać tylko jedno lub drugie:Metody throwsIf()
i throwsUnless()
imagemagick
obsługują również callables, jeśli wolisz ten styl lub masz niestandardową logikę, której chcesz użyć do określenia, czy test powinien zgłosić wyjątek:
test('gd wrapper can create an image', function () {
$image = imagecreate(width: 200, height: 200);
imagecolorallocate($image, 255, 255, 255);
imagepng($image, '/tmp/new_image_gd.png');
expect(file_exists('/tmp/new_image_gd.png'))->toBeTrue();
})->throwsUnless(extension_loaded('gd'), \Error::class);
test('imagemagic wrapper can create an image', function () {
$image = new Imagick();
// ...
})->throwsUnless(extension_loaded('imagick'), \Error::class);
test('example test with callables', function () {
$image = new Imagick();
// ...
})->throwsUnless(fn () => class_exists(\Imagick::class), 'Class "Imagick" not found');
Dowiedz się więcej Możesz dowiedzieć się więcej
o obsłudze wyjątków w testach w dokumentacji wyjątków szkodników. Ponadto, jeśli dopiero zaczynasz przygodę z PestPHP i wolisz filmy, zalecamy zapoznanie się z artykułem Naucz się PestPHP od podstaw autorstwa Luke'a Downinga.