在 Laravel 中,我通常需要检测环境以避免在运行测试时触发某些代码,例如记录或发送电子邮件:
if (!app()->environment("testing")) {
Mail::to($email)->queue(new WelcomeEmail($transaction->id));
}
当我的 4 个环境文件中的 3 个环境文件(本地和 CI/CD 单元测试、CI/CD 上的 Dusk)中的环境设置为
testing
时,效果很好,但是我的 .env.dusk.local
文件 - I need 才能运行Laravel Dusk 本地 - 有一个 local
环境,在这些情况下 Dusk 会触发发送电子邮件、日志等。
我能看到的最干净的解决方案是检测 Dusk 是否在任何环境中运行 - 我知道有一个
app()->runningUnitTests()
方法,但不知道 Dusk 的等效方法。
Dusk 将检查文件
.env.dusk.<environment>
。
以
local
环境为例,它会检查.env.dusk.local
。在该文件中设置 APP_ENV=dusk
将允许您在必要时添加诸如 if(app()->environment('dusk'))
之类的检查。
正如评论中所指出的,对于发送邮件或日志记录的具体示例,您通常最好将
MAIL_DRIVER
或 LOG_CHANNEL
覆盖为适合测试的内容,例如 MAIL_DRIVER=log
或 LOG_CHANNEL=daily
,这样您仍然可以在不发送实际电子邮件的情况下测试该功能。