0

在我的测试用例中,我尝试更改一些环境变量以创建更好的测试用例覆盖率。

Laravel 默认只支持通过 获取环境变量env($key, $default = null),我无法更改变量。

Illuminate\Support\Env唯一支持,get不支持set

此外,默认情况下,Laravel 用于vlucas/phpdotenv管理环境变量。他们中的大多数人都在使用ImmutableWriter.

有没有什么简单的方法可以支持动态变化的环境变量存储在ImmutableWriter.

同样,出于安全原因,没有必要(也不应该)在生产中实施该解决方案。

4

1 回答 1

0

PHP 7+ Closure 有一些有趣的特性,可以绕过私有/受保护的检查。但是,它非常适合编写测试用例。

use Illuminate\Support\Env;

function resetEnvValue($name, $value)
{
    $environmentRepository = Env::getRepository();

    $fn = function () use ($name, $value) {
        $fn = function() use ($name, $value) {
            $this->writer->write($name, $value);
        };
        $fn->call($this->writer);
    };
    $fn->call($environmentRepository);
}

resetEnvValue('TIMER', 1);

var_dump(env('TIMER')); // int(1)

resetEnvValue('TIMER', 2);

var_dump(env('TIMER')); // int(2)

请不要在生产环境中使用,上面的代码绕过了所有的ImmutableWriter保护,只适合测试。

于 2021-03-24T06:32:05.433 回答