如何在 laravel 中向手动注册事件监听器添加测试?
Posted
技术标签:
【中文标题】如何在 laravel 中向手动注册事件监听器添加测试?【英文标题】:How to add test to Manually Registering Events Listener in laravel? 【发布时间】:2020-10-18 10:21:49 【问题描述】:我有一个手动注册的事件和相关的监听器。为此,我想添加测试,所以我在文档中检查了 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);
【问题讨论】:
嘿任何精灵???? 你想“单元”测试吗?如果是,你想用哪种方法?如果是集成或功能,您要从哪里测试到哪里? 是的,我想测试单元测试功能。从观察者删除事件到监听器。主要是我想测试我收到正确的值。例如上面的$team
.
我的回答对你有帮助吗,@Dev?如果没有,你能告诉我缺少什么吗?
【参考方案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();
【讨论】:
以上是关于如何在 laravel 中向手动注册事件监听器添加测试?的主要内容,如果未能解决你的问题,请参考以下文章