如何测试是否在模型方法中调度事件

时间:2015-12-01 11:20:11

标签: cakephp phpunit cakephp-2.0

我正在用phpunit为我的cakephp模型编写单元测试。我的模型调度这样的事件:

private function __dispatchEmailEvent(){
        $Event = new CakeEvent(
            'Model.Order.afterSaveCustomersOrder',
            $this,
            array()
        );
        $this->getEventManager()->dispatch($Event);
    }

我可以在我的测试函数中编写什么来检查此事件是否已正确分派?

public function testEventDispatched(){

}

1 个答案:

答案 0 :(得分:4)

有很多方法......我个人主要使用的方法是注册一个监听器并修改一个引用的变量,可以在调用触发事件的动作之后对其进行测试,例如

$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