繁体   English   中英

测试Eloquent Observer的方法是否触发事件

[英]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对其进行测试时,不会触发口才事件,这意味着永远不会执行已saved方法中的代码。 从我看来, assertDispatchedassertNotDispatched方法仅适用于伪造事件。 有没有办法断言没有Event::fake不会触发特定事件?

毕竟,该解决方案非常简单:

Laravel让您指定哪些事件应该被伪造,作为fake方法的参数。 在我的示例中:

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

所有其他事件都将被触发和处理。 此外,您只能参考作为fake方法的参数传递的事件进行断言。 如果您不传递任何参数,Laravel将尝试“伪造”应用程序中的每个事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM