测试 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 方法中的代码永远不会被执行。据我所知,assertDispatchedassertNotDispatched 方法仅适用于伪造的事件。有没有办法断言特定事件 is/is 在没有 Event::fake 的情况下不会被触发?

毕竟解决方案非常简单:

Laravel 允许您指定应伪造哪些事件,作为 fake 方法的参数。在我的例子中:

Event::fake([JobCustomerTotalAmountDueChanged::class])

正在触发和处理所有其他事件。此外,您可以仅参考作为参数传递给 fake 方法的事件进行断言。如果您不传递任何参数,Laravel 将尝试 'fake' 应用程序中的每个事件。