【发布时间】:2016-11-24 12:44:38
【问题描述】:
我有一个通过初始化事件监听器添加到所有模型的行为。
// src/Event/InitializeEventListener.php
...
class InitializeEventListener implements EventListenerInterface
{
public function implementedEvents()
{
return [
'Model.initialize' => 'initializeEvent'
];
}
public function initializeEvent(Event $event, $data = [], $options = [])
{
$event->subject()->addBehavior('MyBehavior');
}
}
// bootstrap.php
$ieListener = new InitializeEventListener();
EventManager::instance()->on($ieListener);
我有UsersController 和index 操作。如果我输入debug($this->Users->behaviors()->loaded());die;,我可以看到默认的Timestamp 和加载的MyBehavior。到目前为止一切正常,我可以在索引操作中使用MyBehavior 的函数。这是在浏览器中打开页面时。
现在,我有了这个测试功能
// tests/TestCase/Controller/UsersControllerTest.php
public function testIndex()
{
$this->get('/users/index');
$this->assertResponseSuccess();
}
但是,在运行测试时,MyBehavior 没有被加载(它不在加载的行为列表中,因此使用它的函数会产生未知方法错误)。我尝试将其添加到 UsersController 的测试用例中
public function setUp()
{
parent::setUp();
$this->Users = TableRegistry::get('Users');
$eventList = new EventList();
$eventList->add(new Event('Users.initializeEvent'));
$this->Users->eventManager()->setEventList($eventList);
}
但是MyBehavior 还是没有加载。
谢谢
【问题讨论】:
标签: cakephp phpunit cakephp-3.x