I have a manually registering event and related listener. For this i want to add test so i checked laravel Mocking Test
in documentation but i didn't find any way to test manually registering event with parameter listener. So anyone help me how to do this? Below i attached working related code.
Event is calling in the TeamObserver deleting
method like below
class TeamObserver
{
public function deleting(Team $team)
{
event('event.team.deleting', array('team' => $team));
}
}
Event and Listeners are registered in EventServiceProvider boot
method like below
public function boot()
{
parent::boot();
Event::listen(
'event.team.deleting',
'Listeners\TeamDeletingListener'
);
}
TeamDeletingListener
is look like below
class TeamDeletingListener
{
public function handle($team)
{
\Log::info('Deleting Inventory Module');
\Log::info($team);
}
}
The simplest way to do this, is to replace the real implementation of your listener with a mocked one. Here's an example test. It will fail if you remove event('event.team.deleting', array('team' => $team));
or pass a different team. If I got you right, that's what you want to achieve.
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();
}