首页 > 解决方案 > Laravel php artisan serve 不尊重 env 标志

问题描述

我正在开发一个 Laravel 项目并尝试集成 Laravel Scout。对于黄昏测试,我创建了一个 .env.dusk.local 环境文件,用于测试。但是当我尝试运行php artisan serve --env=dusk.local它时,它只运行默认的 .env 文件。所有其他 .env 文件也不起作用。

我使用 Laravel 8.15.0。我也尝试清除配置缓存,但没有任何改变。

我目前没有想法,所以希望有人可以帮助我。

标签: phplaraveltestinglaravel-dusk

解决方案


如果你看到 laravel 黄昏文档,你会发现你不需要让你单独的黄昏 env 文件替换原始文件,一旦测试完成,它会自动恢复它。

运行测试时,Dusk 将备份您的 .env 文件并将您的 Dusk 环境重命名为 .env。测试完成后,您的 .env 文件将被恢复。

在此处输入图像描述


如果还是不行

由于vlucas/phpdotenv'方法'load()',您可以手动设置环境,

<?php

namespace Tests\Browser;

use App\Models\User;
use Laravel\Dusk\Chrome;
use Tests\DuskTestCase;

class ExampleTest extends DuskTestCase
{
    private function setEnv(){
       $env_name = "dusk.local";
       if (isset($env_name)) {
            // Immutability refers to if Dotenv is allowed to overwrite existing environment variables. If you want Dotenv to overwrite existing environment variables, use createMutable instead of createImmutable(from vlucas/phpdotenv repo)
            $dotenv = \Dotenv\Dotenv::createImmutable(base_path(), '.env.'.$env_name);
    
            try {
                $dotenv->load();
            } catch (\Dotenv\Exception\InvalidPathException $e) {
                $e->getTraceAsString();
            }
        }
    }
    public function testBasicExample()
    {
        $this->setEnv();
    }
}

推荐阅读