您可以通过覆盖的方法访问控制器IntegrationTestCase::controllerSpy()
,并且在发送请求后,控制器也将$this->_controller
在您的测试方法中可用。
public function controllerSpy($event, $controller = null)
{
parent::controllerSpy($event, $controller);
if (isset($this->_controller)) {
$eventList = new \Cake\Event\EventList();
$this->_controller->eventManager()->setEventList($eventList);
}
}
public function someTest()
{
// ...
$this->assertEventFired('someEvent', $this->_controller->eventManager());
}
您也可以依赖全局事件管理器,因为每个请求应该只有一个控制器。
但是,这也需要事件名称是唯一的,因为无法使用 进一步限制事件的来源assertEventFired()
,因此这不是一个非常好的解决方案。但是,为了完整起见,这也是一个示例。
public function someTest()
{
$eventList = new \Cake\Event\EventList();
\Cake\Event\EventManager::instance()->setEventList($eventList);
// ...
$this->assertEventFired('someEvent');
}
也可以看看