У меня есть несколько команд laravel, которые наследуются от моего собственного класса для отправки слабых сообщений, если они терпят неудачу. Тем не менее, если уведомление о зазоре завершается неудачно, я все равно хочу, чтобы исходное исключение было выдано, чтобы ошибка все равно появлялась в журналах, если зазор недоступен или неправильно настроен. У меня есть это, и это работает, но я не могу понять, как вызвать исключения в части уведомлений в тестах.
namespace App\Support;
use App\Notifications\SlackNotification;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Notification;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CarrotCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output)
{
try {
return parent::execute($input, $output);
} catch (\Exception $e) {
$this->notifySlack($e);
throw $e;
}
}
protected function notifySlack(\Exception $e)
{
try {
Notification::route('slack', config('app.slack_webhook'))->notify(
new SlackNotification(
"Error\n" . get_class($e) . ': ' . $e->getMessage(),
'warning'
)
);
} catch (\Exception $exception) {
// I want to reach this part in a test
$this->error(
'Failed to send notice to slack: ' . $exception->getMessage()
);
}
}
}
Так как Notification::route
определено на фасаде, я не могу использовать Notification::shouldReceive
, чтобы вызвать исключение, а SlackNotification
обновлен, что затрудняет имитацию.
Есть идеи, как я могу вызвать исключение?