尝试仅用_instanceof标记教义数据装置,仅用于Symfony 4中的"测试"环境



我正在编写一个Symfony 4.1 rest API,并尝试使用fixture为我的phpunit测试设置测试数据库。

我的问题是,我希望通过向doctrine:fixtures:load命令提供-e test选项,使fixture基于symfony env运行

在阅读了一些文档后,我考虑使用symfony autowiring _instanceof functionnality和services_test.yaml文件,但它似乎不起作用。

如果我将代码的_instanceof位移到services.yaml中,它可以工作,但当然适用于所有环境。

有人有主意吗?也许我错过了什么。提前感谢您的建议:(

以下是我所做的:

用于标记的界面

<?php
namespace AppDataFixtures;
interface BookieTestFixtureInterface
{
}

"仅限测试"夹具

<?php
namespace AppDataFixtures;
use DoctrineCommonDataFixturesAbstractFixture;
use DoctrineCommonPersistenceObjectManager;
class UserFixtures extends AbstractFixture implements BookieTestFixtureInterface
{
public function load(ObjectManager $manager)
{
// do some stuff
}
}

services_test.yaml文件

services:
_defaults:
public: true
_instanceof:
AppDataFixturesBookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']

services.yaml文件

services:
_defaults:
autowire: true     
autoconfigure: true 
public: false
App:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
AppController:
resource: '../src/Controller'
tags: ['controller.service_arguments']

解决方案(services_test.yaml(

services:
_defaults:
autowire: true
autoconfigure: true
public: true
_instanceof:
AppDataFixturesBookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'

我认为_instanceof仅适用于当前文件。因此,您需要PSR-4在services_test.yaml:中自动发现固定装置

services:
_defaults:
public: true
_instanceof:
AppDataFixturesBookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App:
resource: '../src/Fixtures'

让我知道它是如何工作的。


Symfony博客上的发布帖子中也有一个关于_instanceof范围的类似问题,但没有得到回应。

最新更新