在我的phpunit中,我有这个配置:
<php>
<env name="ENVIRONMENT" value="test"/>
</php>
我在错误的假设下工作,它始终将环境变量设置为值test
。然而,当系统已经具有变量集时,它更喜欢已存在的值。
$ export ENVIRONMENT=GNARF
$ phpunit -c test/phpunit.xml
因此,在测试中,env('ENVIRONMENT')
的值将为"GNARF"
,即使我预期"test"
。
有没有办法让phpunit将env
设置视为默认值而不是它应该使用的确定值?
我也想避免以某种方式调用phpunit来获得正确的env变量。
所以虽然这有效:
ENVIRONMENT="test";./vendor/bin/phpunit -c tests/phpunit.xml
如果可能的话,我宁愿在phpunit.xml
文件中配置它。
答案 0 :(得分:8)
这种方式对我有用(用 PHPUnit 6.5 进行测试):
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="MyProject">
<directory>tests</directory>
</testsuite>
</testsuites>
<php>
<env name="API_KEY" value="fakeApiKey" force="true" />
</php>
</phpunit>
在这里pull request他们添加了这个新功能(如果您有兴趣的话)。
sebastianbergmann于2017年7月4日将其添加到PHPUnit 6.3里程碑
答案 1 :(得分:1)
环境变量在PHPUnit_Util_Configuration::handlePHPConfiguration()
中设置,实际上,它看起来像这样:
foreach ($configuration['env'] as $name => $value) {
if (false === getenv($name)) {
putenv("{$name}={$value}");
}
if (!isset($_ENV[$name])) {
$_ENV[$name] = $value;
}
}
看起来,如果不先取消变量,就无法绕过这项检查。当你在它的时候,你也可以立即将它设置为所需的值。
答案 2 :(得分:1)
您可以从env
文件中设置bootstrap
变量。可以从phpunit.xml
文件中选择引导文件,因此结果将是您要查找的内容。