如何检测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
相关产品推荐
相关产品推荐

