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

Symfony 5 Functional Tests - Environment Variables missing, getenv() returns false

我正在将我的一个项目重写到 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'
    }
}

# this is .env.test file

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

KERNEL_CLASS='App\Kernel'
APP_ENV=test

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

TEST_ENV_VARIABLE='my secret env value'

TEST_ENV_VARIABLE 返回为 false。总是。我将它放在 .env.testphpunit.xml.dist 或我将指向的任何其他文件中都没有关系。总是返回 false.

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

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

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

老实说,当我在测试中使用 getenv() 时,存在 none 个 ENV 变量。即使是 Symfony 附带的默认值。

我正在使用 Symfony PHP unit bridge thingy 运行 我的测试是这样的:

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

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

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

如果你对更多细节感兴趣,你可以找到 PR here