我如何正确测试 Laravel 事件?
How do i properly test Laravel events?
我正在为一个模型编写测试,该模型会在其属性之一发生更改时触发一个事件。不幸的是,我想不出测试这个的最佳方法。型号代码为:
class Foo extends Eloquent {
public function setNameAttribute($value) {
$this->attributes['name'] = $value;
if($this->exists && ($this->original['name'] != $value)) {
Event::fire('foo.NameChange', array($this));
}
}
}
我对事件火灾的初步测试:
$bar = Foo::first();
Event::shouldReceive('fire')->once()->with('foo.NameChange', array($bar));
$bar->name = 'test';
问题是,如果:
,以上测试仍然通过
- 根本没有发生任何事件
- 我正在第二次更改模型的名称(这应该会触发
第二次参加这个活动对吧?)
如何才能让我的测试仅在发生一个 foo.NameChange
事件时通过?所有其他的 senario 应该都没有通过我的测试。
您必须在 tearDown()
方法中调用 Mockery::close()
。
请参阅有关 PHPUnit 集成的 Mockery docs。
我正在为一个模型编写测试,该模型会在其属性之一发生更改时触发一个事件。不幸的是,我想不出测试这个的最佳方法。型号代码为:
class Foo extends Eloquent {
public function setNameAttribute($value) {
$this->attributes['name'] = $value;
if($this->exists && ($this->original['name'] != $value)) {
Event::fire('foo.NameChange', array($this));
}
}
}
我对事件火灾的初步测试:
$bar = Foo::first();
Event::shouldReceive('fire')->once()->with('foo.NameChange', array($bar));
$bar->name = 'test';
问题是,如果:
,以上测试仍然通过- 根本没有发生任何事件
- 我正在第二次更改模型的名称(这应该会触发 第二次参加这个活动对吧?)
如何才能让我的测试仅在发生一个 foo.NameChange
事件时通过?所有其他的 senario 应该都没有通过我的测试。
您必须在 tearDown()
方法中调用 Mockery::close()
。
请参阅有关 PHPUnit 集成的 Mockery docs。