如果已分派事件,如何在功能测试中进行测试

时间:2016-02-03 08:58:20

标签: php symfony testing phpunit

我正在使用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只包含有关某些侦听器实际执行过的事件的数据。幸运的是,在这个特定的情况下有一个事件监听器被执行,但我希望它也可以在没有附加任何事件监听器的情况下工作,因为我不能肯定地说这种情况会继续如此。

所以我的问题是,如果有一种方法可以测试是否调度了一个事件,即使没有连接事件监听器也是如此。

2 个答案:

答案 0 :(得分:2)

您只能在测试环境中注册事件监听器/订阅者。其唯一目的是让您检查事件是否被解雇。

答案 1 :(得分:1)

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

事件监听是黑匣子的内部实施,不受功能测试的影响。它应该单独测试。启用分析器,您基本上可以更改被测系统,并最终测试仅与生产代码部分相关的内容。