尝试在 Symfony 4 中仅针对 'test' 环境使用 _instanceof 标记学说数据装置
Trying to tag doctrine data fixtures with _instanceof only for 'test' env in Symfony 4
我正在编写 Symfony 4.1 rest API 并尝试使用固定装置为我的 phpunit 测试设置测试数据库。
我的问题是,我希望通过为 doctrine:fixtures:load
命令
提供 -e test
选项,让 运行 基于 symfony 环境的固定装置
阅读一些文档后,我正在考虑使用 symfony 自动装配 _instanceof 功能以及 services_test.yaml
文件,但它似乎不起作用。
如果我将代码的 _instanceof
位移动到 services.yaml
,它可以工作,但当然适用于所有环境。
有人有想法吗?也许我错过了什么。预先感谢您的建议:)
这是我所做的:
用于标记的界面
<?php
namespace App\DataFixtures;
interface BookieTestFixtureInterface
{
}
'test-only'夹具
<?php
namespace App\DataFixtures;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\Persistence\ObjectManager;
class UserFixtures extends AbstractFixture implements BookieTestFixtureInterface
{
public function load(ObjectManager $manager)
{
// do some stuff
}
}
services_test.yaml 文件
services:
_defaults:
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
services.yaml 文件
services:
_defaults:
autowire: true
autoconfigure: true
public: false
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
解决方案(services_test.yaml)
services:
_defaults:
autowire: true
autoconfigure: true
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
我认为 _instanceof
仅适用于当前文件。所以你需要 PSR-4 autodiscover fixtures in services_test.yaml
:
services:
_defaults:
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App\:
resource: '../src/Fixtures'
告诉我它是如何工作的。
关于_instanceof
的范围在release post on Symfony blog下也有类似的问题,但是没有回复。
我正在编写 Symfony 4.1 rest API 并尝试使用固定装置为我的 phpunit 测试设置测试数据库。
我的问题是,我希望通过为 doctrine:fixtures:load
命令
-e test
选项,让 运行 基于 symfony 环境的固定装置
阅读一些文档后,我正在考虑使用 symfony 自动装配 _instanceof 功能以及 services_test.yaml
文件,但它似乎不起作用。
如果我将代码的 _instanceof
位移动到 services.yaml
,它可以工作,但当然适用于所有环境。
有人有想法吗?也许我错过了什么。预先感谢您的建议:)
这是我所做的:
用于标记的界面
<?php
namespace App\DataFixtures;
interface BookieTestFixtureInterface
{
}
'test-only'夹具
<?php
namespace App\DataFixtures;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\Persistence\ObjectManager;
class UserFixtures extends AbstractFixture implements BookieTestFixtureInterface
{
public function load(ObjectManager $manager)
{
// do some stuff
}
}
services_test.yaml 文件
services:
_defaults:
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
services.yaml 文件
services:
_defaults:
autowire: true
autoconfigure: true
public: false
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
解决方案(services_test.yaml)
services:
_defaults:
autowire: true
autoconfigure: true
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
我认为 _instanceof
仅适用于当前文件。所以你需要 PSR-4 autodiscover fixtures in services_test.yaml
:
services:
_defaults:
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App\:
resource: '../src/Fixtures'
告诉我它是如何工作的。
关于_instanceof
的范围在release post on Symfony blog下也有类似的问题,但是没有回复。