Ama*_*ade 1 php phpunit unit-testing laravel-5 laravel-5.5
当Eloquent模型属性之一更新时,我正在使用的应用程序将触发一个事件。
Eloquent模型被调用Job,并且应该在更新属性JobCustomerTotalAmountDueChanged时触发duration。我在中有以下代码JobObserver:
public function saved(Job $job)
{
if ($job->isDirty('duration')) {
event(new JobCustomerTotalAmountDueChanged($job));
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用进行测试时Event::fake,不会触发savedEloquent 事件,这意味着永远不会执行方法中的代码。从我看到的assertDispatched和assertNotDispatched方法仅适用于伪造的事件。有没有一种方法可以断言是否不触发特定事件Event::fake?
毕竟,该解决方案非常简单:
Laravel让您指定哪些事件应该被伪造,作为fake方法的参数。在我的示例中:
Event::fake([JobCustomerTotalAmountDueChanged::class])
Run Code Online (Sandbox Code Playgroud)
所有其他事件都将被触发和处理。另外,您只能对作为fake方法参数传递的事件进行断言。如果您不传递任何参数,Laravel将尝试“伪造”应用程序中的每个事件。