Попытка пометить фикстуры данных доктрины с помощью _instanceof только для 'test' env в Symfony 4

Я кодирую 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_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}'
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
279
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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, но без ответа.

Что ж, большое спасибо! Это действительно было правильное решение, мне просто нужно было добавить еще немного конфигурации, иначе ObjectManager не будет передаваться в мое устройство. Я собираюсь отредактировать свой вопрос с полным решением.

Alfred Wallace 26.07.2018 09:07

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