如何在phpunit测试中强制将环境变量设置为某个值?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在phpunit测试中强制将环境变量设置为某个值?相关的知识,希望对你有一定的参考价值。
在我的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
文件中配置它。
答案
这种方式对我有用(用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里程碑中
另一答案
环境变量在PHPUnit_Util_Configuration::handlePHPConfiguration()
中设置,实际上,它看起来像这样:
foreach ($configuration['env'] as $name => $value) {
if (false === getenv($name)) {
putenv("{$name}={$value}");
}
if (!isset($_ENV[$name])) {
$_ENV[$name] = $value;
}
}
看起来,没有办法在不首先取消变量的情况下绕过这个检查。当你在它的时候,你也可以立即将它设置为所需的值。
另一答案
您可以从env
文件中设置bootstrap
变量。可以从phpunit.xml
文件中选择引导程序文件,因此结果将是您要查找的内容。
以上是关于如何在phpunit测试中强制将环境变量设置为某个值?的主要内容,如果未能解决你的问题,请参考以下文章