0

0

laravel怎么在测试中模拟(Fake)事件和通知_laravel测试中Fake事件与通知方法

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-11-25 08:25:02

|

626人浏览过

|

来源于php中文网

原创

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

laravel怎么在测试中模拟(fake)事件和通知_laravel测试中fake事件与通知方法

如果您在编写 Laravel 测试时希望避免触发真实事件或通知,以提高测试速度并隔离副作用,可以通过 Laravel 提供的事件和通知伪造机制来实现。这使得事件不会真正广播,通知也不会实际发送。

本文运行环境:MacBook Pro,macOS Sonoma

一、使用 Event::fake() 伪造所有事件

通过调用 Event::fake() 方法,可以阻止所有事件的监听器执行,从而在测试中完全屏蔽事件行为。此方法常用于不需要验证具体事件类型,仅需确保无真实事件被触发的场景。

1、在测试类的 setUp 方法或测试用例开始前调用 Event::fake()

2、执行业务逻辑,例如创建模型或调用服务。

3、由于事件已被伪造,任何触发的事件都不会激活其监听器。

二、仅伪造指定事件

若只想屏蔽部分事件而允许其他事件正常运行,可向 Event::fake() 传入事件类数组,实现选择性伪造。这种方式适用于需要保留某些事件响应逻辑的测试。

1、导入需要伪造的事件类。

2、调用 Event::fake([UserRegistered::class, OrderShipped::class]) 来仅伪造特定事件。

3、其余未列出的事件仍将正常分发并执行监听器。

三、断言事件是否被触发

在伪造事件后,可通过断言方法验证某个事件是否被正确调度。这是测试事件逻辑正确性的关键步骤。

1、使用 Event::assertDispatched(Registered::class) 断言事件已被触发。

LAIKA
LAIKA

LAIKA 是一个创意伙伴,您可以训练它像您(或您想要的任何人)一样写作。

下载

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组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

316

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

273

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

369

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

370

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

81

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

64

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.08.05

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

465

2024.01.03

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

8

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML教程
HTML教程

共500课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号