我正在编写一个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
范围的类似问题,但没有得到回应。