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



我正在将我的一个项目重写为Symfony 5。我注意到env变量有些奇怪。我再也不能像以前那样在功能测试中得到它们了。

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

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

<?php
namespace AppTests;
use AppTraitsToolsTestsDatabaseUsesTestDatabase;
use SymfonyBundleFrameworkBundleKernelBrowser;
use SymfonyBundleFrameworkBundleTestWebTestCase;
/**
* Class ApiTestCase
* @package AppTests
*/
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='AppKernel'
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()时,没有任何ENV变量存在。即使是Symfony附带的默认版本。

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

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

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

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

如果你对的更多细节感兴趣,你可以在这里找到PR

最新更新