PHP: 7.2.7
SYMFONY: 3.4.12
PHPUNIT-BRIDGE: 4.1.1 (phpunit 6.5.8)
У меня есть сценарий развертывания, написанный на PHP, который запускается от имени пользователя root и, начиная с обновления до php 7.2 с 7.0 и соответственно обновляя мой код, он начал необъяснимым образом давать сбой при выполнении тестов phpunit. Я уверен, что здесь я виноват, но после многих часов отладки я ничего не получил и надеюсь, что кто-то сможет указать мне правильное направление.
Сценарий запускается от имени пользователя root и при выполнении выполняет следующее:
exec("runuser MY-USER -c 'bin/simple-phpunit'", $output, $returnCode);
Все мои тесты не проходят с:
You have requested a non-existent service "test.client"
Существует множество проблем с SO, связанных с этой ошибкой, и она связана с тем, что для среды phpunit не установлено значение «test». Мой phpunit.xml использует правильное значение:
<env name="APP_ENV" value="test" />
Сумасшедшая часть заключается в том, что модульные тесты запускаются очень хорошо, когда я запускаю их сам (как МОЙ-ПОЛЬЗОВАТЕЛЬ). Они даже работают правильно, когда я вхожу в систему как root и выполняю
runuser MY-USER -c 'bin/simple-phpunit'
Они даже бегут, когда я
$ sudo su
$ php -a
php > exec("runuser MY-USER -c 'bin/simple-phpunit'", $output, $returnCode);
И когда я впал в отчаяние и начал выводить переменные в консоль, кажется, что все в порядке:
echo "ENV = " .getenv('APP_ENV'); // [OUTPUT BELOW]
ENV = dev
exec('bin/console debug:container test.client -e test', $output, $return);
var_dump(implode("\n", $output)); // [OUTPUT BELOW]
Information for Service "test.client"
=====================================
---------------- ---------------------------------------
Option Value
---------------- ---------------------------------------
Service ID test.client
Class Symfony\Bundle\FrameworkBundle\Client
Tags -
Public yes
Synthetic no
Lazy no
Shared no
Abstract no
Autowired no
Autoconfigured no
exec("runuser arderyp -c 'bin/simple-phpunit --debug'", $output, $return);
var_dump(implode("\n", $output)); // [OUTPUT BELOW]
# Everything fails in the same fashion as below
8) App\Tests\Authentication\Security\SomeTest::testSomething
Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException: You have requested a non-existent service "test.client".
Перед запуском тестов я правильно анализирую свой .env, используя стандартный подход Symfony:
$dotenv = new Dotenv();
$dotenv->load('.env');