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