Pest недавно добавил throwsUnless()
метод в Pest v2.24 для условной проверки исключения, если заданное логическое выражение имеет значение false.
Этот метод является аналогом throwIf()
метода, который условно проверяет исключение, если заданное выражение истинно:
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);
Например, предположим, что у вас есть PHP-пакет, который поддерживает различные расширения PHP для работы с изображениями. Среда CI может поддерживать и тестировать и то, и другое и ; однако другие среды могут поддерживать только один или другой:Методы throwsIf()
and throwsUnless()
также поддерживают вызываемые объекты, если вы предпочитаете этот стиль или у вас есть какая-то пользовательская логика, которую вы хотите использовать, чтобы определить, imagemagick
gd
должен ли тест вызвать исключение:
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');
Подробнее
Сведения об обработке исключений в тестах см. в документации по исключениям вредителей. Кроме того, если вы новичок в PestPHP и предпочитаете видео, мы рекомендуем ознакомиться с книгой Люка Даунинга «Изучаем PestPHP с нуля».