如何测试事件是否在模型方法中分派
How can I test if an event is dispatched in a model method
我正在用 phpunit 为我的 cakephp 模型编写单元测试。我的模型发送这样的事件:
private function __dispatchEmailEvent(){
$Event = new CakeEvent(
'Model.Order.afterSaveCustomersOrder',
$this,
array()
);
$this->getEventManager()->dispatch($Event);
}
我可以在我的测试函数中写什么来检查这个事件是否被正确发送?
public function testEventDispatched(){
}
有多种方法...我个人最常用的一种是注册监听器并修改引用变量,可以在调用触发事件的动作后进行测试,例如
$model = ClassRegistry::init('TableName');
$dispatched = false;
$model->getEventManager()->attach(
function (CakeEvent $event) use ($model, &$dispatched) {
$this->assertSame($model, $event->subject());
$this->assertEquals([], $event->data);
$dispatched = true;
},
'Model.Order.afterSaveCustomersOrder'
);
$model->invokeWhateverTriggersTheEvent();
$this->assertTrue($dispatched);
* 未经测试,至少需要 PHP 5.4
我正在用 phpunit 为我的 cakephp 模型编写单元测试。我的模型发送这样的事件:
private function __dispatchEmailEvent(){
$Event = new CakeEvent(
'Model.Order.afterSaveCustomersOrder',
$this,
array()
);
$this->getEventManager()->dispatch($Event);
}
我可以在我的测试函数中写什么来检查这个事件是否被正确发送?
public function testEventDispatched(){
}
有多种方法...我个人最常用的一种是注册监听器并修改引用变量,可以在调用触发事件的动作后进行测试,例如
$model = ClassRegistry::init('TableName');
$dispatched = false;
$model->getEventManager()->attach(
function (CakeEvent $event) use ($model, &$dispatched) {
$this->assertSame($model, $event->subject());
$this->assertEquals([], $event->data);
$dispatched = true;
},
'Model.Order.afterSaveCustomersOrder'
);
$model->invokeWhateverTriggersTheEvent();
$this->assertTrue($dispatched);
* 未经测试,至少需要 PHP 5.4