[英]Keep getting 'You have requested a non-existent service “test.client”' in Symfony2 Beta3
[英]symfony simple-phpunit error 'You have requested a non-existent service “test.client”' only in deployment script
的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);
我所有的測試都失敗了:
You have requested a non-existent service "test.client"
關於此錯誤有很多SO問題,並且與phpunit環境未設置為“測試”有關。 我的phpunit.xml使用正確的值:
<env name="APP_ENV" value="test" />
瘋狂的是,當我自己(以MY-USER)運行時,單元測試運行得很好。 當我以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".
在運行測試之前,我使用symfony標准方法正確解析了.env:
$dotenv = new Dotenv();
$dotenv->load('.env');
好吧,好像我也被PHPUnit的這種變化所困擾: https : //github.com/sebastianbergmann/phpunit/issues/2353
將force="true"
屬性添加到我所有的env
元素都解決了該問題。
這里的問題是,在進入此phpunit步驟之前,我正在加載(通過Dotenv
)我的本地.env
文件。 沒有上面提到的force
屬性, phpunit.xml
中的環境變量不會覆蓋.env
已經設置的環境變量。 因此,將使用APP_ENV=dev
而不是APP_ENV=test
來運行APP_ENV=test
,這將導致無法識別test.client
服務,因為該服務只能在test
環境中訪問。 顯然,這是新的phpunit
功能。 早期版本的phpunit
默認情況下將允許覆蓋變量,這解釋了為什么我僅在升級PHP(以及phpunit)之后才開始遇到此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.