Как внедрить хранилища Doctrine в тестовые наборы Symfony 3.4 - PullRequest
1 голос
/ 01 декабря 2019

Я следовал инструкциям на https://www.tomasvotruba.cz/blog/2017/10/16/how-to-use-repository-with-doctrine-as-service-in-symfony/, чтобы превратить мои репозитории в сервисы, которые можно внедрить в мои тесты. Вот что у меня есть:

Мой репозиторий:

<?php
declare(strict_types=1);

namespace OpenCFP\Domain\Repository;

use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use OpenCFP\Domain\Entity\Airport;

final class AirportRepository
{
    /**
     * @var EntityRepository
     */
    private $repository;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->repository = $entityManager->getRepository(Airport::class);
    }
}

Моя сущность

<?php
declare(strict_types=1);
namespace OpenCFP\Domain\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="airports")
 */
final class Airport
{
    /**
     * @ORM\@Id
     * @ORM\Column(type="string", length=3)
     */
    private $code;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $country;
}

Вот что я добавил в свой файл services.yml согласно инструкциямЯ обнаружил

OpenCFP\Domain\Repository\:
  public: true
  resource: '%kernel.project_dir%/src/Domain/Repository/*'

Я добавил следующий код в setUp() метод моего теста, основанный на направлениях, которые я нашел здесь

$kernel = self::bootKernel();
$this->airport = $kernel->getContainer()->get(AirportRepository::class);

Когда я запускаюtest Я получаю следующее сообщение об ошибке:

Symfony \ Component \ DependencyInjection \ Exception \ RuntimeException: не удается автоматически подключить службу "OpenCFP \ Domain \ Repository \ AirportRepository": аргумент "$ entityManager" метода "__construct () "ссылается на интерфейс" Doctrine \ ORM \ EntityManagerInterface ", но такой службы не существует. Его нельзя зарегистрировать автоматически, поскольку он находится в другом корневом пространстве имен.

...