如果已调度事件,如何在功能测试中进行测试



我正在使用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仅包含有关实际执行某些侦听器的事件的数据。幸运的是,在这种特定情况下执行了一个事件侦听器,但我希望它在没有任何事件侦听器的情况下也能工作,因为我不能确定这种情况会继续这样。

所以我的问题是,是否有办法测试是否调度了事件,即保存,即使没有附加事件侦听器。

只能在测试环境中注册事件侦听器/订阅者。它的唯一目的是使您能够检查事件是否已触发。

Yagni。功能测试应该基于规范,例如,向PUT /api/nodes/ HTTP/1.1发送一些数据应该会产生一些(理想情况下)对 API 消费者有价值的东西。我想是一些数据操作。测试应确认输出与特定数据排列的预期相匹配。

事件侦听是黑盒的内部实现,不是功能测试的主题。它应该单独测试。启用探查器,您基本上会更改受测系统,并最终测试仅与生产代码部分相关的内容。

最新更新