为什么phpunit得不到phpunit.xml中指定的正确的APP_ENV?

我正在使用Laravel,这是我的./phpunit.xml文件

<?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> 

我用下面的命令发射我的一个testing套件:

 ./vendor/phpunit/phpunit/phpunit --testsuite UnitTests 

在我的testing方法里面我有:

 public function testAllMandatoryData() { dump(env('APP_ENV')); .... } 

它显示“本地”我期待“testing”在phpunit.xml中指定

  <env name="APP_ENV" value="testing"/> 

编辑:额外的细节我有这个laravel应用程序在Docker容器中运行

在docker-compose.yml中,我设置了一些环境variables:

 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"/> 

已经在docker上有名字的时候没有效果了。

相反,如果我添加一些没有在docker-compose.yml中定义,将正确设置在phpunit运行时,如:

  <env name="DB_CONNECTION" value="sqlite_test"/> 

结束编辑

我错过了什么?

谢谢

改用config('APP_ENV')env()值可能会被caching,在这种情况下, php artisan config:clear可能会有所帮助,但是我也遇到了从命令行环境访问env值的问题。

更多信息在这里和这里 。

我试着用我find的最好的select来回答自己。

如果你在docker-compose.yml文件中设置ENVvariables,你将不能用phpunit.xml指令覆盖它们,例如:

  <env name="APP_ENV" value="testing"/> 

那么你应该select从docker-compose.yml中删除(如在这个例子中)APP_ENVvariables集合

并依靠.env Laravel文件

 APP_ENV=local 

通过这个设置,phpunit将能够覆盖APP_ENV来“testing”

所有docker代理版本,我仍然不能100%确定需要这种安排。 我与另一个Docker版本的另一个主机的行为有所不同。

Interesting Posts