Laravel 单元测试当 Eloquent 模型事件被触发时是否触发事件

Wai*_*ein 1 laravel laravel-testing laravel-events

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

这是我的 ItemObserver 创建的函数

public function created(Item $item)
{
    event(new NewItemCreated($item));
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

正如您在测试代码中看到的,我试图断言创建项目时是否触发事件。但是测试永远不会通过,因为观察者类的创建函数永远不会被调用,因为事件在测试中是伪造的。我如何测试这个场景?

小智 6

仅伪造您要测试的事件:

Event::fake([NewItemCreated::class]);
Run Code Online (Sandbox Code Playgroud)

相关文档。