Попытка пометить фиксации данных доктрины с помощью _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, но без ответа.

Другие вопросы по тегам