我正在尝试将我的Symfony 3.4应用程序迁移到Symfony 4.1。
测试不起作用,因为在默认情况下,这些服务是私有的(这是个好消息)。
下面这个帖子:https://symfony.com/blog/new-in-symfony-4-1-simpler-service-testing,我仍然面临着私人服务的问题:
在编译容器时,Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException:"my.service“服务或别名已被删除或内联。要么将其公开,要么停止直接使用容器,转而使用依赖项注入。
在下面的编译器传递中,在$definitions:vendor/symfony/framework-bundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php中找不到我的私有服务
问题应该是什么?
已更新
这里的定义是:
<service id="my.service"
class="My\Bundle\GreatService">
<argument type="service" id="doctrine.orm.entity_manager" />
</service>更新(再次)
这里是单元测试
<?php
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class MyServiceTest extends KernelTestCase
{
protected $myService;
public function setUp()
{
self::bootKernel();
$this->myService = self::$container->get('my.service');
}
//...
}发布于 2018-07-17 13:04:06
奇怪的是,上面的代码不起作用。当我使用symfony 4.0时,我使用了这样的技巧:
1.将services_test.yaml添加到config文件夹中,内容如下:
services:
_defaults:
public: true
test.my.service: "@my.service"2.现在您可以从您的集装箱获得服务:
$this->myService = self::$container->get('test.my.service')顺便说一句,您是否将此服务注入某个地方,因为未使用的服务在默认情况下会被删除(如果它们不是公共的或合成的)。
https://stackoverflow.com/questions/51377317
复制相似问题