正在测试Symfony Bundle:未找到doctrine.org.mentity



我正在创建一个独立的Symfony 4.4捆绑包,我需要对它进行测试!

我创建了一个扩展Kernel的AppKernelTest,并注册了我所有的捆绑包:

class ServicesBundleTestingKernel extends Kernel
{
/**
* @inheritDoc
*/
public function registerBundles()
{
return [
new FrameworkBundle(),
new MonologBundle(),
new DoctrineBundle(),
new DoctrineMigrationsBundle(),
new MyServicesBundle(), // My custom bundle
];
}
/**
* @inheritDoc
*/
public function registerContainerConfiguration(LoaderInterface $loader)
{
}
}

在我的捆绑包中,我有一个需要条令实体管理器的服务,这是我的service.xml(我在其中声明捆绑包的所有服务(

<service id="ServicesBundleServiceRequestHandler" class="ServicesBundleServiceRequestHandler" public="false" >
<argument key="$logger" type="service" id="monolog.logger"/>
<argument key="$em" type="service" id="doctrine.orm.entity_manager"/>
</service>
<service id="services_request_handler" alias="ServicesBundleServiceRequestHandler" public="true" />

我的测试课程:


class DependencyTest extends WebTestCase
{
//private $container;
public function testServiceWiring()
{
self::bootKernel();
}
}

我已经将.env.test配置为使用我的自定义内核类进行测试,但当我启动测试时,我收到了以下错误:

1(ServicesBundle\Tests\DependencyTest::testServiceWiringSymfony\Component\DependencyInjection\Exception\ServiceNotFoundException:服务"services_request_handler"依赖于不存在的服务"doctory.orm.entity_manager"。

对于下面的测试,我从registerBundle((方法中删除了Bundle。

我尝试命令:php bin/console debug:container doctrine.orm.entity_manager,输出为:"未找到服务">

当应用程序启动时,我还试图在我的容器中查看所有条令服务,我只有两个服务:

  • [0]cache.adapter.doctrine

  • [1] 条令\通用\注释\阅读器

我不知道为什么条令捆绑包没有正确注册。

我认为问题与启动ServicesBundleTestingKernel时必须加载最低原则配置有关。

因此,您必须在Resources/config/test/doctrine.yaml下创建一个具有最低doctrine配置的文件,类似于

doctrine:
dbal:
driver:  pdo_sqlite
memory: true
serverVersion=5.7'
charset: UTF8
override_url: true
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/tests/Entity'
prefix: 'PackageNameNameBundleTestsEntity'
alias: App

稍后在ServicesBundleTestingKernel中加载此配置,registerContainerConfiguration方法:

public function registerContainerConfiguration(LoaderInterface $loader)
{
//load config for orm
$confDir = $this->getProjectDir().'/src/Resources/config';
$loader->load($confDir . '/{test}/*' . '.yaml', 'glob');
}

相关内容

  • 没有找到相关文章

最新更新