Я кодирую Rest API Symfony 4.1 и пытаюсь использовать фикстуры для настройки тестовой базы данных для моих тестов phpunit.
Моя проблема в том, что я хотел бы иметь фикстуры, которые запускаются на основе symfony env, предоставив опцию -e test команде doctrine:fixtures:load.
Прочитав какой-то документ, я подумал об использовании функции symfony autowiring _instanceof, а также файла services_test.yaml, но, похоже, это не работает.
Если я перенесу бит кода _instanceof в services.yaml, он будет работать, но, конечно, для всех окружений.
Есть у кого-нибудь идеи? Может я что-то упустил. Заранее спасибо за ваши предложения :)
Вот что я сделал:
<?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:
_defaults:
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
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:
_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 в services_test.yaml:
services:
_defaults:
public: true
_instanceof:
App\DataFixtures\BookieTestFixtureInterface:
tags: ['doctrine.fixture.orm']
App\:
resource: '../src/Fixtures'
Сообщите мне, как это работает.
Есть также аналогичный вопрос относительно объема _instanceof в рамках опубликовать пост в блоге Symfony, но без ответа.
Что ж, большое спасибо! Это действительно было правильное решение, мне просто нужно было добавить еще немного конфигурации, иначе ObjectManager не будет передаваться в мое устройство. Я собираюсь отредактировать свой вопрос с полным решением.