如果事件已被分派,如何在功能测试中进行测试
How to test in functional test if event has been dispatched
我正在使用 Symfony 中的功能测试来测试控制器操作。在这个测试中,我正在做这样的事情:
$client->request(
'PUT',
'/api/nodes/',
$data
);
之后我想测试某个事件是否已经被发送。我之前已经尝试启用探查器(并相应地设置配置)并检查 EventDataCollector
:
中的数据
$client->enableProfiler();
$client->request(
'PUT',
'/api/nodes/' . $data[0]['id'] . '?webspace=sulu_io&language=en',
$data[0]
);
/** @var EventDataCollector $eventDataCollector */
$eventDataCollector = $client->getProfile()->getCollector('events');
这按预期工作,但问题是 $eventDataCollector
仅包含有关已实际执行某些侦听器的事件的数据。幸运的是,在这种特定情况下执行了一个事件侦听器,但我希望它也能在没有附加任何事件侦听器的情况下工作,因为我不能肯定地说这种情况会继续这样。
所以我的问题是,即使没有附加事件侦听器,是否有一种方法可以测试是否已分派事件,即保存。
亚格尼。功能测试应基于规范,例如向 PUT /api/nodes/ HTTP/1.1
发送一些数据应该会产生对 API 消费者有价值的东西(理想情况下)。我想是一些数据操作。测试应确认输出符合特定数据排列的预期。
事件监听是黑盒的内部实现,不是功能测试的对象。它应该被隔离测试。启用分析器,你基本上改变了被测系统,并最终测试了一些与生产代码部分相关的东西。
您只能在您的测试环境中注册一个事件listener/subscriber。它的唯一目的是使您能够检查事件是否被触发。
我正在使用 Symfony 中的功能测试来测试控制器操作。在这个测试中,我正在做这样的事情:
$client->request(
'PUT',
'/api/nodes/',
$data
);
之后我想测试某个事件是否已经被发送。我之前已经尝试启用探查器(并相应地设置配置)并检查 EventDataCollector
:
$client->enableProfiler();
$client->request(
'PUT',
'/api/nodes/' . $data[0]['id'] . '?webspace=sulu_io&language=en',
$data[0]
);
/** @var EventDataCollector $eventDataCollector */
$eventDataCollector = $client->getProfile()->getCollector('events');
这按预期工作,但问题是 $eventDataCollector
仅包含有关已实际执行某些侦听器的事件的数据。幸运的是,在这种特定情况下执行了一个事件侦听器,但我希望它也能在没有附加任何事件侦听器的情况下工作,因为我不能肯定地说这种情况会继续这样。
所以我的问题是,即使没有附加事件侦听器,是否有一种方法可以测试是否已分派事件,即保存。
亚格尼。功能测试应基于规范,例如向 PUT /api/nodes/ HTTP/1.1
发送一些数据应该会产生对 API 消费者有价值的东西(理想情况下)。我想是一些数据操作。测试应确认输出符合特定数据排列的预期。
事件监听是黑盒的内部实现,不是功能测试的对象。它应该被隔离测试。启用分析器,你基本上改变了被测系统,并最终测试了一些与生产代码部分相关的东西。
您只能在您的测试环境中注册一个事件listener/subscriber。它的唯一目的是使您能够检查事件是否被触发。