为什么phpunit没有像phpunit.xml中指定的那样获取正确的APP_ENV?
问题描述:
我使用Laravel,这是我./phpunit.xml文件为什么phpunit没有像phpunit.xml中指定的那样获取正确的APP_ENV?
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="bootstrap/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="FeatureTests">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
<testsuite name="UnitTests">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite_testing" />
</php>
</phpunit>
我烧我的测试套件,使用下列命令之一:
./vendor/phpunit/phpunit/phpunit --testsuite UnitTests
在我的测试方法我有:
public function testAllMandatoryData()
{
dump(env('APP_ENV'));
....
}
在phpunit.xml指定它显示“本地”我所期待的“测试”
<env name="APP_ENV" value="testing"/>
编辑:额外的细节 我有一个码头工人容器
在泊坞窗,compose.yml运行此应用laravel我设置一些环境变量,如:
environment:
- APP_ENV=local
- DB_HOST=192.168.0.22
- DB_PORT=33306
- DB_DATABASE=mydatabase
- DB_USERNAME=homestead
- DB_PASSWORD=homestead
我”什么我们注意到phpunit.xml中的指令是这样的:
<env name="APP_ENV" value="testing"/>
没有e当名字在码头上的时候已经有了。
相反,如果我添加在泊坞窗,compose.yml一些没有定义会被正确地设置在PHPUnit的运行,如:
<env name="DB_CONNECTION" value="sqlite_test"/>
末编辑
什么我失踪?
谢谢
答
我尝试用我发现的最佳选择来回答自己。
如果您在泊坞窗,compose.yml文件中设置ENV变量,你将无法与phpunit.xml指令,如覆盖它们:
<env name="APP_ENV" value="testing"/>
那么你应该选择在此移除(如例如)从泊坞窗 - compose.yml APP_ENV变量设置
,依靠.ENV Laravel文件
APP_ENV=local
在此设置下,PHPUnit的就能覆盖APP_ENV到“TE刺“
我仍然不是100%确定需要这种安排,所有码头代理版本。我与另一个Docker版本的另一个主机的行为有所不同。
我不确定你可以重写应用程序级别的容器变量吗?也许这些帮助:https://github.com/docker/compose/issues/3183,http://philippe.bourgau.net/docker-compose-trick-how-to-have-an-overridable-environment-variable- in-development-mode/ –