Загрузка данных в setUpBeforeClass с помощью LiipFunctionalTestBundle - PullRequest
0 голосов
/ 26 февраля 2019

Как видно из названия, я хотел бы знать, как загрузить данные в методе setUpBeforeClass.Класс тестирования расширяется Liip\FunctionalTestBundle\Test\WebTestCase.

На данный момент у меня есть это:

public function setUp()
{
    $this->client = $this->createClient();
    $this->fixtures = $this->loadFixtures([
        'App\DataFixtures\MyFixtures',
        // more fixtures
    ])->getReferenceRepository();
}

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

Когда я пытался загрузить приборы в setUpBeforeClass, у меня появляется ошибка:

Ошибка: использование $ this, когда не в контексте объекта в / home/cezar/phpprojects/livegene/vendor/liip/functional-test-bundle/src/Test/WebTestCase.php:252

Просмотр исходного кода LiipFunctionalTestBundle раскрытэтот фрагмент:

protected function loadFixtures(array $classNames = [], bool $append = false, ?string $omName = null, string $registryName = 'doctrine', ?int $purgeMode = null): ?AbstractExecutor
{
    $container = $this->getContainer();

    $dbToolCollection = $container->get('liip_functional_test.services.database_tool_collection');
    $dbTool = $dbToolCollection->get($omName, $registryName, $purgeMode, <strong>$this</strong>);
    $dbTool->setExcludedDoctrineTables($this->excludedDoctrineTables);

    return $dbTool->loadFixtures($classNames, $append);
}

Можно ли сделать это, что я хочу, и если да, как это может быть достигнуто?

1 Ответ

0 голосов
/ 26 февраля 2019

Если все, что вам нужно, это работающий EntityManager с (частично) допустимой схемой базы данных для запроса, вы можете использовать DoctrineTestHelper, предоставленный Symfony DoctrineBridge:

public static function setUpBeforeClass()
{
    $config = DoctrineTestHelper::createTestConfiguration();
    $config->setNamingStrategy(new UnderscoreNamingStrategy());
    $entityManager = DoctrineTestHelper::createTestEntityManager($config);
    $schemaTool = new SchemaTool($entityManager);
    $schemaTool->createSchema([
        // List of entities to create schema for
        $entityManager->getClassMetadata(User::class),
        $entityManager->getClassMetadata(Task::class),
    ]);
    static::$entityManager = $entityManager;
}

По умолчанию это будет использовать SQLite3 впамять для соединения, но вы также можете указать ее для любой другой базы данных, используя конфигурацию и соответствующие драйверы.Также будьте внимательны при регистрации любых пользовательских типов DBAL и прослушивателей LifecycleEvent, поскольку это изменит способ обработки данных и работает ли сопоставление с вашими сущностями.

Теперь в ваших тестах вы можете использовать static::$entityManager каквсегда с таблицами или вставляйте контрольные приборы, как вам удобно.

...