Как сделать так, чтобы уведомление Laravel выдало исключение в тесте - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть несколько команд 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 обновлен, что затрудняет имитацию.

Есть идеи, как я могу вызвать исключение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...