Symfony 5 功能测试 - 缺少环境变量,getenv() 返回 false

Rob*_*ert 4 integration-testing environment-variables functional-testing symfony symfony5

我正在将我的一个项目重写为 Symfony 5。我注意到环境变量有些奇怪。我无法再像以前在功能测试中获取它们一样获取它们了。

这并不重要,但我有自己的习惯ApiTestCase,它扩展了 Symfony 5 附带的现有测试用例。

在那里我正在做类似的事情(这不是关于我的应用程序的设计或流程的问题,只是关于如何获取变量):

<?php

namespace App\Tests;

use App\Traits\Tools\Tests\Database\UsesTestDatabase;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

/**
 * Class ApiTestCase
 * @package App\Tests
 */
class ApiTestCase extends WebTestCase
{
   /**
     * ApiTestCase constructor.
     */
    public function __construct()
    {
        parent::__construct();
        dd(getenv('TEST_ENV_VARIABLE')) // should give me 'my secret env value'
    }
}
Run Code Online (Sandbox Code Playgroud)

# this is .env.test file

############################################################################################################
#
# GENERAL SETTINGS
#
############################################################################################################

KERNEL_CLASS='App\Kernel'
APP_ENV=test

############################################################################################################
#
# TEST DATABASE CONFIGURATION
#
############################################################################################################

TEST_ENV_VARIABLE='my secret env value'

Run Code Online (Sandbox Code Playgroud)

TEST_ENV_VARIABLE返回为 false。总是。我是否将其放入.env.testphpunit.xml.dist我将指向的任何其他文件中都没关系。总是以 的形式返回false

有趣的是 - 我在 Symfony 4 中没有遇到这个问题。我正在查看我的旧代码,并且可以getenv()正常工作。

我做了一些调查,在config/bootstrap.php文件中,测试 ENV 的所有变量都可见$_SERVER,但由于某种原因,它们从未被拖入 ENV 中。Symfony 5 在这方面有什么不同吗?

我查看了文档,但没有看到任何可以帮助我的内容(或者我只是错过了)。有谁知道那可能是什么?

老实说,当我getenv()在测试中使用时,没有任何 ENV 变量存在。即使是 Symfony 附带的默认版本。

我正在使用 Symfony PHP 单元桥,并像这样运行我的测试:

./bin/phpunit tests/Integration/Container/Controllers/ContainerControllerTest.php

我几乎可以肯定这与我的设置有关 - 只是不确定它可能是什么。

Phi*_*nke 8

在 Symfony 5 中,dotenv 组件中不推荐使用 putenv。您必须使用$_ENV$_SERVER来访问环境变量。

如果您有兴趣了解更多详细信息,可以在此处找到 PR