我如何正确测试Laravel事件?

时间:2015-03-19 12:52:08

标签: php laravel laravel-4 phpunit mockery

我正在为一个模型编写测试,该模型在其中一个属性发生更改时触发事件。不幸的是,我无法找出测试它的最佳方法。型号代码为:

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都不会通过我的测试。

1 个答案:

答案 0 :(得分:2)

您必须在Mockery::close()方法中致电tearDown()。 请参阅有关PHPUnit集成的Mockery docs