Symfony 3.4 phpunit и приспособления

Я хочу создать некоторые приспособления для разных сред, например prod для загрузки значений по умолчанию, dev для разработчиков и test для тестирования с помощью phpunit.

Я создал абстрактный класс

    abstract class AbstractFixture extends Fixture implements ContainerAwareInterface
{
    protected $container;

    public function setContainer(ContainerInterface $container = null): void
    {
        $this->container = $container;
    }

    public function load(ObjectManager $manager): void
    {
        $kernel = $this->container->get('kernel');
        if (\in_array($kernel->getEnvironment(), $this->getEnvironments(), true)) {
            $this->doLoad($manager);
        }
    }

    abstract protected function getEnvironments();

    abstract protected function doLoad(ObjectManager $manager);
}

Например, если мне нужен прибор для среды разработки

    class DevFixture extends AbstractFixture implements DependentFixtureInterface
{
    public function getDependencies(): array
    {
        return [
            AppFixture::class,
            DevFixture::class,
        ];
    }

    protected function getEnvironments(): array
    {
        return ['dev'];
    }

    protected function doLoad(ObjectManager $objectManager): void
    {
    }
}

Когда я запускаю bin / console doctrine: fixtures: load --env dev Ничего страшного

Теперь я хочу использовать это приспособление для тестирования моего приложения с помощью phpunit. Я хочу, чтобы для каждого теста загружался прибор.

Я хочу знать, как это сделать? используя setUp () и запустив команду doctrine: fixtures: load --env dev или есть другой способ?

Стоит ли изучать 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
422
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что вы можете сделать для достижения ожидаемого поведения, я думаю, вы можете использовать bootstrap.php, который будет запускаться один раз перед всеми вашими тестами.

Образец того, что я пытаюсь сказать:

<?php declare(strict_types=1);

require __DIR__.'/../vendor/autoload.php';

echo 'Recreating and Seeding Database';
passthru('php "'.__DIR__.'/../bin/console" doctrine:database:drop --force --env=test');
passthru('php "'.__DIR__.'/../bin/console" doctrine:database:create --env=test');
passthru('php "'.__DIR__.'/../bin/console" doctrine:schema:create --env=test');
passthru('php "'.__DIR__.'/../../bin/console" doctrine:fixtures:load --env=test');
echo ' Done'.PHP_EOL;

Я использую дополнительный пакет dama / doctrine-test-bundle, этот пакет использует транзакцию для отмены модификации базы данных. Я объяснил свой удаленный пост :(

eldiablo62 10.10.2018 15:54

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