Laravel单元测试雄辩的模型事件触发时是否触发了事件

时间:2019-09-16 20:35:15

标签: laravel laravel-testing laravel-events

我一直在开发Laravel应用程序并编写测试。现在,我在编写测试时遇到问题,该测试断言在触发雄辩的模型事件时是否触发了事件。这就是我在做什么。

这是我的ItemObserver创建的功能

public function created(Item $item)
{
    event(new NewItemCreated($item));
}

如您所见,我正在雄辩的模型观察者的已创建事件中触发一个事件。

如果我想断言测试中是否触发了事件,则必须伪造该事件,然后断言诸如此类的事情。

Event::fake();
factory(Item::class)->create(); //created function of observer should be triggered but it will not be
Event::assertDispatched(NewItemCreated::class);

您可以在测试代码中看到,我试图断言在创建项目时是否触发了事件。但是测试将永远不会通过,因为从未调用观察者类的创建函数,因为Event在测试中被伪造了。如何测试这种情况?

1 个答案:

答案 0 :(得分:2)

仅伪造您要测试的事件:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = America/Montreal

Relevant documentation.