如何让Laravel功能测试与单元测试都仅使用.env.testing文件
更简单的实现方案
你不需要每次测试前后手动切换配置缓存,下面两个方案都可以一次配置永久生效:
方案1:修改测试框架配置(最推荐)
直接强制所有测试场景默认使用testing环境,自动加载.env.testing:
- 打开项目根目录的
phpunit.xml(如果用Pest则打开pest.xml) - 找到文件内的
<php>配置节点,添加/修改APP_ENV配置,加上force="true"属性:
<php> <!-- 保留原有其他配置项 --> <server name="APP_ENV" value="testing" force="true"/> </php>
- 配置完成后先执行一次
php artisan config:clear清空本地旧的配置缓存,之后不管运行单元测试还是功能测试,都会自动读取.env.testing的配置。
方案2:封装测试执行命令
如果不想修改框架配置,可以在执行测试时直接指定环境变量,还可以封装成Composer脚本简化输入:
- 打开项目根目录的
composer.json,在scripts节点添加以下配置:
{ "scripts": { "test": "APP_ENV=testing ./vendor/bin/phpunit", "test-feature": "APP_ENV=testing ./vendor/bin/phpunit --testsuite=Feature", "test-unit": "APP_ENV=testing ./vendor/bin/phpunit --testsuite=Unit" } }
- 后续需要执行测试时,直接运行对应的
composer test系列命令即可,不需要额外处理配置缓存。
Windows环境下可以将命令修改为
set APP_ENV=testing && ./vendor/bin/phpunit,也可以安装cross-env扩展实现跨平台兼容。
你之前使用的手动切换配置缓存的方法存在风险,如果测试结束后忘记恢复缓存,本地开发环境会一直加载测试环境配置,更推荐上面两种无侵入的配置方案。
内容的提问来源于stack exchange,提问作者G.Baghashvili
相关产品推荐
相关产品推荐

