laravel怎么在测试中模拟通知的发送(Notification Fake)_laravel测试中Notification Fake方法
发布时间 - 2025-10-18 00:00:00 点击率:次在 Laravel 测试中,使用 Notification::fake() 可模拟通知发送行为,避免实际调用外部服务。首先调用 Notification::fake() 拦截通知,然后通过 assertSentTo 等方法断言用户是否收到指定通知,如 Notification::assertSentTo($user, AccountApprovedNotification::class);支持验证发送次数、未发送情况及通知参数内容,例如通过闭包检查通知数据或通道,确保 order_id 正确或包含 mail 通道;同一测试中可多次调用 fake() 清除记录以隔离场景。该方式提升测试速度与稳定性,无需依赖真实邮件或短信服务。
在 Laravel 测试中,你不需要实际发送通知(Notification),而是可以通过 Notification Facade 的 Fake 功能来模拟通知的发送行为。这样可以避免调用真实邮件、短信或第三方服务,同时还能验证通知是否被正确分发给目标用户。
1. 使用 Notification::fake() 模拟通知
在测试开始前调用 Notification::fake(),Laravel 会拦截所有通知发送请求,不会真正触发任何外部操作。
示例:
use Illuminate\Support\Facades\Notification;
use Tests\TestCase;
class UserNotificationTest extends TestCase
{
public function test_notification_sent_to_user()
{
Notification::fake(); // 启用通知模拟
$user = factory(User::class)->create();
// 触发某个会发送通知的操作
$user->notify(new AccountApprovedNotification());
// 断言指定用户收到了指定通知
Notification::assertSentTo($user, AccountApprovedNotification::class);
}
}
2. 常用断言方法
启用 fake 后,你可以使用以下方法验证通知行为:
- assertSentTo($notifiable, $notification):断言某个可通知对象收到了指定通知。
- assertNotSentTo($notifiable, $notification):断言某个对象没有收到该通知。
- assertNothingSent():断言没有任何通知被发送。
- assertSentToTimes($notifiable, $notification, $times):断言通知被发送了指定次数。
示例:验证发送次数
Notification::assertSentToTimes($user, AccountApprovedNotification::class, 1);
3. 检查通知的参数内容
你还可以检查通知实例中的数据,确保传递的内容正确。
Notification::assertSentTo(
$user,
AccountApprovedNotification::class,
function ($notification, $channels) use
($expectedData) {
return $notification->order->id === $expectedData['order_id'];
}
);
上面的闭包接收通知实例和通道数组,返回 true 表示匹配成功。可用于验证通知携带的数据是否符合预期。
4. 针对不同通道的测试
Laravel 通知支持多种通道(如 mail、database、broadcast 等)。你可以验证通知是否通过特定通道发送。
Notification::assertSentTo(
$user,
AccountApprovedNotification::class,
function ($notification, $channels) {
return in_array('mail', $channels); // 确保通过邮件通道发送
}
);
5. 清除已记录的通知
如果你在同一个测试中需要分别测试多个场景,可以使用 Notification::fake() 重置记录:
Notification::fake(); // 清空之前记录 // 执行新操作并断言
每次调用 fake() 都会清空之前的发送记录,适合隔离不同测试逻辑。
基本上就这些。只要记得先调用 Notification::fake(),再执行业务逻辑,最后用断言验证行为即可。这种方式让测试更快速、稳定,且不依赖外部服务。
# laravel
# cad
# app
# ai
# mail
# class
# 闭包
# 对象
# database
# 你可以
# 测试中
# 收到了
# 清空
# 如果你
# 多个
# 还能
# 没有任何
# 你还
# 你不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
如何在阿里云ECS服务器部署织梦CMS网站?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
高端网站建设与定制开发一站式解决方案 中企动力
PHP正则匹配日期和时间(时间戳转换)的实例代码
jQuery 常见小例汇总
制作旅游网站html,怎样注册旅游网站?
创业网站制作流程,创业网站可靠吗?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
网站制作报价单模板图片,小松挖机官方网站报价?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
开心动漫网站制作软件下载,十分开心动画为何停播?
详解MySQL数据库的安装与密码配置
JavaScript模板引擎Template.js使用详解
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
如何在香港免费服务器上快速搭建网站?
微信小程序 scroll-view组件实现列表页实例代码
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
JavaScript实现Fly Bird小游戏
如何用搬瓦工VPS快速搭建个人网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
iOS UIView常见属性方法小结
Firefox Developer Edition开发者版本入口
如何快速选择适合个人网站的云服务器配置?
深圳网站制作培训,深圳哪些招聘网站比较好?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
js代码实现下拉菜单【推荐】
Laravel如何实现API资源集合?(Resource Collection教程)
php 三元运算符实例详细介绍
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
如何快速搭建二级域名独立网站?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何快速上传建站程序避免常见错误?
在线制作视频的网站有哪些,电脑如何制作视频短片?
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Laravel如何处理表单验证?(Requests代码示例)
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
三星网站视频制作教程下载,三星w23网页如何全屏?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
长沙做网站要多少钱,长沙国安网络怎么样?
Bootstrap整体框架之JavaScript插件架构
如何获取PHP WAP自助建站系统源码?


($expectedData) {
return $notification->order->id === $expectedData['order_id'];
}
);