的PHP:7.2.7
SYMFONY:3.4.12
PHPUNIT-BRIDGE:4.1.1(phpunit 6.5.8)
我有一个用PHP编写的部署脚本,该脚本以root用户身份运行,并且由于从7.0升级到php 7.2并相应地更新了我的代码,因此在运行phpunit测试时,该脚本已开始莫名其妙地失败。我确定我在这里有错,但是经过许多小时的调试,我仍然一无所获,希望有人可以为我指明正确的方向。
该脚本以root身份运行,并在执行以下命令时运行:
exec("runuser MY-USER -c 'bin/simple-phpunit'", $output, $returnCode);
Run Code Online (Sandbox Code Playgroud)
我所有的测试都失败了:
You have requested a non-existent service "test.client"
Run Code Online (Sandbox Code Playgroud)
关于此错误有很多SO问题,并且与phpunit环境未设置为“测试”有关。我的phpunit.xml使用正确的值:
<env name="APP_ENV" value="test" />
Run Code Online (Sandbox Code Playgroud)
疯狂的是,当我自己(以MY-USER)运行时,单元测试运行得很好。当我以root身份登录并执行时,它们甚至可以正常运行
runuser MY-USER -c 'bin/simple-phpunit'
Run Code Online (Sandbox Code Playgroud)
我做的时候他们甚至跑
$ sudo su
$ php -a
php > exec("runuser MY-USER -c 'bin/simple-phpunit'", $output, $returnCode);
Run Code Online (Sandbox Code Playgroud)
当我感到绝望并开始将变量转储到控制台时,似乎一切正常:
echo "ENV = " .getenv('APP_ENV'); // [OUTPUT BELOW]
Run Code Online (Sandbox Code Playgroud)
ENV = dev
Run Code Online (Sandbox Code Playgroud)
exec('bin/console debug:container test.client -e test', $output, $return);
var_dump(implode("\n", $output)); // [OUTPUT BELOW]
Run Code Online (Sandbox Code Playgroud)
Information for Service "test.client" …
Run Code Online (Sandbox Code Playgroud)