如何在phpunit test中将环境变量强制为某个值?

时间:2016-02-18 10:49:52

标签: php phpunit environment-variables

在我的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文件中配置它。

3 个答案:

答案 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文件中选择引导文件,因此结果将是您要查找的内容。