You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Laravel Dusk是否正在运行?

解决Laravel Dusk本地测试触发邮件/日志的问题

直接用Laravel官方提供的app()->runningDusk()方法就能搞定,不管你当前环境是local还是testing,只要是Dusk在运行,这个方法就会返回true,完美适配你本地用.env.dusk.local的场景。

改完后的代码示例

把你原来的环境检测逻辑替换成这样,同时排除单元测试和Dusk测试的情况:

if (!app()->runningUnitTests() && !app()->runningDusk()) {
    Mail::to($email)->queue(new WelcomeEmail($transaction->id));
}

要是你想更省事,直接排除所有测试场景(单元测试+Dusk),Laravel 8及以上版本可以用这个简洁写法:

if (!app()->runningTests()) {
    // 这里放邮件发送、日志记录这些不想在测试里跑的代码
}

提醒:Laravel 8以下版本的runningTests()只覆盖单元测试,所以得分开判断runningUnitTests()和runningDusk()。

为啥这个方法管用?

当你执行php artisan dusk启动Dusk测试时,Laravel内部会自动打个标记,runningDusk()就是检查这个标记的状态——和你.env里的APP_ENV值没关系,哪怕你本地Dusk用的是local环境,也能准确识别出是Dusk在运行。

另一种可选方案(不如上面简洁)

如果你偏好通过环境变量控制,可以在.env.dusk.local里把APP_ENV改成dusk,然后修改检测逻辑:

if (!app()->environment(["testing", "dusk"])) {
    Mail::to($email)->queue(new WelcomeEmail($transaction->id));
}

不过这个方法需要改环境文件,通用性不如直接用runningDusk()。

内容的提问来源于stack exchange,提问作者Hashim Aziz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:35:18