koa*_*aok 7 xml phpunit laravel docker
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
我用以下命令触发了我的一个测试套件:
./vendor/phpunit/phpunit/phpunit --testsuite UnitTests
Run Code Online (Sandbox Code Playgroud)
在我的测试方法中,我有:
public function testAllMandatoryData()
{
dump(env('APP_ENV'));
....
}
Run Code Online (Sandbox Code Playgroud)
它正在显示"本地",我期待phpunit.xml中指定的"测试"
<env name="APP_ENV" value="testing"/>
Run Code Online (Sandbox Code Playgroud)
编辑:其他详细信息 我在Docker容器中运行此laravel应用程序
在docker-compose.yml上我设置了一些环境变量,如:
environment:
- APP_ENV=local
- DB_HOST=192.168.0.22
- DB_PORT=33306
- DB_DATABASE=mydatabase
- DB_USERNAME=homestead
- DB_PASSWORD=homestead
Run Code Online (Sandbox Code Playgroud)
我注意到的是phpunit.xml中的指令如下:
<env name="APP_ENV" value="testing"/>
Run Code Online (Sandbox Code Playgroud)
当docker-compose中的名字已经存在时没有效果.
相反,如果我添加一些未在docker-compose.yml中定义的将在phpunit运行时正确设置,如:
<env name="DB_CONNECTION" value="sqlite_test"/>
Run Code Online (Sandbox Code Playgroud)
结束编辑
我错过了什么?
谢谢
我尝试用我找到的最佳选择回答自己.
如果在docker-compose.yml文件中设置ENV变量,则无法使用phpunit.xml指令覆盖它们,例如:
<env name="APP_ENV" value="testing"/>
Run Code Online (Sandbox Code Playgroud)
然后你应该选择从docker-compose.yml中删除(如本例所示)APP_ENV变量集
并依赖.env Laravel文件
APP_ENV=local
Run Code Online (Sandbox Code Playgroud)
通过此设置,phpunit将能够覆盖APP_ENV以"测试"
对于所有docker agent版本,我仍然不能100%确定需要这种安排.我与另一个Docker版本的另一个主机表现不同.
使用
<env name="APP_ENV" value="testing" force="true"/>
<env name="CACHE_DRIVER" value="array" force="true"/>
<env name="SESSION_DRIVER" value="array" force="true"/>
<env name="QUEUE_DRIVER" value="sync" force="true"/>
<env name="DB_CONNECTION" value="sqlite_testing" force="true"/>
Run Code Online (Sandbox Code Playgroud)
如果没有force参数,它将无法正常工作。看到这个问题:https : //github.com/sebastianbergmann/phpunit/issues/2353 和合并的PR:https : //github.com/sebastianbergmann/phpunit/pull/2723
| 归档时间: |
|
| 查看次数: |
3090 次 |
| 最近记录: |