Проблема с Symfony при работе с phpunit с помощью sqlite - PullRequest
1 голос
/ 07 апреля 2019

Я пытаюсь настроить Symfony для использования sqlite для тестов.

composer.json (require-dev)

"doctrine/doctrine-fixtures-bundle": "^3.1",
"liip/functional-test-bundle": "~2.0@alpha",

config / packages / test / doctrine.yaml:

doctrine:
  dbal:
    driver: 'pdo_sqlite'
    url: 'sqlite:///%kernel.project_dir%/var/test.db3'

затем я сделал такой тест

class SimplestTest extends WebTestCase
{

private $fixtures;

public function setUp()
{
    $this->fixtures = $this->loadFixtures([
        MyFixtures::class
        ])->getReferenceRepository();
}

public function testToSeeIfItWorks()
{
    $this->assertTrue(true);
}
}

Класс MyFixtures расширяет AbstractFixture и загружает некоторые простые объекты:

class MyFixtures extends AbstractFixture
{
public function load(ObjectManager $manager)
{

    $user1 = new User();
    $user1->setRoles(['ROLE_USER']);

    $manager->persist($user1);
    $manager->flush();

    $myFeed = new Feed();
    $myFeed->setName('Feed 1');
    $myFeed->setUrl('http://someurl');
    $myFeed->setUser($user1);

    $manager->persist($myFeed);
    $manager->flush();
}
}

Когда я запускаю тест, я получаю:

InvalidArgumentException: "App\Tests\DataFixtures\ORM\MyFixtures" is not a registered fixture

понятия не имею, почему.любая помощь?

спасибо

1 Ответ

1 голос
/ 07 апреля 2019

Я думаю, я знаю, в чем проблема. Кажется, что в документации библиотеки есть ошибка, если речь идет о классе, из которого следует расширить прибор. В документация в состояниях для использования Doctrine\Common\DataFixtures\AbstractFixture, но это делает прибор не загружается автоматически.

Как вы можете прочитать в документации DoctrineFixturesBundle , пакет добавит тег doctrine.fixture.orm путем автоматического подключения к любому классу, который реализует ORMFixtureInterface, например Doctrine\Bundle\FixturesBundle\Fixture. Загрузка приборов из классов, которые реализуют интерфейс, выполняется с помощью FixturesCompilerPass.

Если вы измените базовый класс вашего прибора на Doctrine\Bundle\FixturesBundle\Fixture, он должен работать.

Обновление:

В довершение всего выше класс прибора должен находиться в App\DataFixtures пространстве имен.

Это потому, что это пространство имен сконфигурировано для автоматического подключения и автоматической настройки. Если вы хотите, чтобы ваши файлы фиксации находились в App\Tests\DataFixtures\, добавьте правильную конфигурацию в файл config/services.yaml:

services:
    App\Tests\DataFixtures\:
        resource: '../tests/DataFixtures'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...