答案:在 Laravel 测试中可通过 Event::fake() 和 Notification::fake() 避免触发真实事件与通知,提升测试效率。首先在测试初始化时调用 Event::fake() 拦截所有事件,或传入事件类数组仅伪造指定事件,保留其他事件执行;随后执行业务逻辑,利用 Event::assertDispatched() 或 assertNotDispatched() 断言事件触发状态,支持回调匹配事件属性;对于通知,调用 Notification::fake() 拦截发送行为,再通过 assertSentTo() 验证指定用户是否收到通知,或使用 assertNotSentTo() 确认未接收特定通知,从而完整验证应用行为。

如果您在编写 Laravel 测试时希望避免触发真实事件或通知,以提高测试速度并隔离副作用,可以通过 Laravel 提供的事件和通知伪造机制来实现。这使得事件不会真正广播,通知也不会实际发送。
本文运行环境:MacBook Pro,macOS Sonoma
通过调用 Event::fake() 方法,可以阻止所有事件的监听器执行,从而在测试中完全屏蔽事件行为。此方法常用于不需要验证具体事件类型,仅需确保无真实事件被触发的场景。
1、在测试类的 setUp 方法或测试用例开始前调用 Event::fake()。
2、执行业务逻辑,例如创建模型或调用服务。
3、由于事件已被伪造,任何触发的事件都不会激活其监听器。
若只想屏蔽部分事件而允许其他事件正常运行,可向 Event::fake() 传入事件类数组,实现选择性伪造。这种方式适用于需要保留某些事件响应逻辑的测试。
1、导入需要伪造的事件类。
2、调用 Event::fake([UserRegistered::class, OrderShipped::class]) 来仅伪造特定事件。
3、其余未列出的事件仍将正常分发并执行监听器。
在伪造事件后,可通过断言方法验证某个事件是否被正确调度。这是测试事件逻辑正确性的关键步骤。
1、使用 Event::assertDispatched(Registered::class) 断言事件已被触发。
2、若需验证事件未被触发,使用 Event::assertNotDispatched(Registered::class)。
3、还可通过回调函数对事件实例的属性进行更精确的匹配判断。
Laravel 提供了 Notification::fake() 方法用于拦截通知发送,便于在测试中验证用户是否收到预期通知。
1、在测试开始前调用 Notification::fake()。
2、执行会触发通知的代码,如用户注册或订单更新。
3、使用 Notification::assertSentTo($user, WelcomeNotification::class) 验证通知是否发送给指定用户。
当需要确认某个用户没有收到特定通知时,可使用否定断言来增强测试完整性。
1、确保已调用 Notification::fake()。
2、执行相关业务逻辑。
3、调用 Notification::assertNotSentTo($user, InvoicePaidNotification::class) 进行反向验证。
以上就是laravel怎么在测试中模拟(Fake)事件和通知_laravel测试中Fake事件与通知方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号