测试 Eloquent 观察者的方法是否触发事件
Test if Eloquent Observer`s method fires an event
当 Eloquent 模型属性之一更新时,我正在开发的应用程序会触发一个事件。
Eloquent 模型称为 Job
,它应该在更新 duration
属性时触发 JobCustomerTotalAmountDueChanged
。我在 JobObserver
:
中有以下代码
public function saved(Job $job)
{
if ($job->isDirty('duration')) {
event(new JobCustomerTotalAmountDueChanged($job));
}
}
当我尝试使用 Event::fake
对其进行测试时,Eloquent 事件没有被触发,这意味着 saved
方法中的代码永远不会被执行。据我所知,assertDispatched
和 assertNotDispatched
方法仅适用于伪造的事件。有没有办法断言特定事件 is/is 在没有 Event::fake
的情况下不会被触发?
毕竟解决方案非常简单:
Laravel 允许您指定应伪造哪些事件,作为 fake
方法的参数。在我的例子中:
Event::fake([JobCustomerTotalAmountDueChanged::class])
正在触发和处理所有其他事件。此外,您可以仅参考作为参数传递给 fake
方法的事件进行断言。如果您不传递任何参数,Laravel 将尝试 'fake' 应用程序中的每个事件。
当 Eloquent 模型属性之一更新时,我正在开发的应用程序会触发一个事件。
Eloquent 模型称为 Job
,它应该在更新 duration
属性时触发 JobCustomerTotalAmountDueChanged
。我在 JobObserver
:
public function saved(Job $job)
{
if ($job->isDirty('duration')) {
event(new JobCustomerTotalAmountDueChanged($job));
}
}
当我尝试使用 Event::fake
对其进行测试时,Eloquent 事件没有被触发,这意味着 saved
方法中的代码永远不会被执行。据我所知,assertDispatched
和 assertNotDispatched
方法仅适用于伪造的事件。有没有办法断言特定事件 is/is 在没有 Event::fake
的情况下不会被触发?
毕竟解决方案非常简单:
Laravel 允许您指定应伪造哪些事件,作为 fake
方法的参数。在我的例子中:
Event::fake([JobCustomerTotalAmountDueChanged::class])
正在触发和处理所有其他事件。此外,您可以仅参考作为参数传递给 fake
方法的事件进行断言。如果您不传递任何参数,Laravel 将尝试 'fake' 应用程序中的每个事件。