Как добавить тест в прослушиватель событий с ручной регистрацией в laravel?

У меня есть событие, регистрируемое вручную, и связанный с ним прослушиватель. Для этого я хочу добавить тест, поэтому я проверил laravel Mocking Test в документации, но не нашел способа протестировать регистрацию события вручную с прослушивателем параметров. Так кто-нибудь поможет мне, как это сделать? Ниже я прикрепил рабочий код.

Событие вызывается методом TeamObserver deleting, как показано ниже.

class TeamObserver
{
    public function deleting(Team $team)
    {
    event('event.team.deleting', array('team' => $team));
    }
}

Событие и слушатели регистрируются в методе EventServiceProvider boot, как показано ниже.

public function boot()
{
    parent::boot();
    Event::listen(
        'event.team.deleting',
        'Listeners\TeamDeletingListener'
    );
}

TeamDeletingListener выглядит так, как показано ниже

class TeamDeletingListener
{
    public function handle($team)
    {
        \Log::info('Deleting Inventory Module');
        \Log::info($team);
    }
}

person Senthur    schedule 28.06.2020    source источник
comment
Эй, есть джинны????   -  person Senthur    schedule 28.06.2020
comment
Вы хотите провести модульное тестирование? Если да, то какой метод вы хотите? Если это интеграция или функция, откуда и куда вы хотите протестировать?   -  person Ersoy    schedule 04.07.2020
comment
Да, я хочу протестировать функцию модульного тестирования. От события удаления Observer к слушателю. В основном я хочу проверить, я получаю правильное значение. Например сверху $team.   -  person Senthur    schedule 04.07.2020
comment
Мой ответ помог тебе, @Dev? Если нет, не могли бы вы сказать мне, чего не хватает?   -  person Philip Weinke    schedule 07.07.2020


Ответы (1)


Самый простой способ сделать это — заменить реальную реализацию вашего слушателя фиктивной. Вот пример теста. Это не удастся, если вы удалите event('event.team.deleting', array('team' => $team)); или передадите другую команду. Если я вас правильно понял, это то, чего вы хотите достичь.

public function testTeamDeletion()
{
    // Persist team that should be deleted
    $team       = new Team();
    $team->name = 'My Team';
    $team->save();

    // Mock the listener
    $this->mock(
        TeamDeletingListener::class,
        function (MockInterface $mock) use ($team) {
            // Expectation
            $mock->shouldReceive('handle')
                ->with($team)
                ->once();
        }
    );

    // Delete team
    $team->delete();
}
person Philip Weinke    schedule 05.07.2020