Попытка пометить фиксации данных доктрины с помощью _instanceof только для 'test' env в Symfony 4
Я кодирую API отдыха Symfony 4.1 и пытаюсь использовать приборы для настройки тестовой базы данных для моих тестов phpunit.
Моя проблема в том, что я хотел бы, чтобы приборы работали на основе Symfony env, предоставляя -e test
вариант к doctrine:fixtures:load
команда
После прочтения какого-то документа я подумал об использовании функции автопроводки Symfony _instanceof functionnality, а также services_test.yaml
файл, но, похоже, не работает.
Если я перееду _instanceof
немного кода в services.yaml
, это работает, но для всех envs конечно.
У кого-нибудь есть идея? Может быть, я что-то пропустил. Заранее спасибо за ваши предложения:)
Вот что я сделал:
Интерфейс, используемый для маркировки
<?php
namespace App\DataFixtures;
interface BookieTestFixtureInterface
{
}
Прибор только для испытаний
<?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}'
1 ответ
Я думаю что _instanceof
применяется только к текущему файлу. Таким образом, вам нужно, чтобы светильники PSR-4 автоматически обнаруживались в services_test.yaml
:
services:
_defaults:
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App\:
resource: '../src/Fixtures'
Дайте мне знать, как это работает.
Существует также аналогичный вопрос относительно объема _instanceof
под сообщением о выпуске в блоге Symfony, но без ответа.