Я хочу создать некоторые приспособления для разных сред, например 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 или есть другой способ?




Что вы можете сделать для достижения ожидаемого поведения, я думаю, вы можете использовать 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, этот пакет использует транзакцию для отмены модификации базы данных. Я объяснил свой удаленный пост :(