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.test
或 phpunit.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
我正在将我的一个项目重写到 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.test
或 phpunit.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