TypeTestCase с EntityType и ServiceEntityRepository - PullRequest
1 голос
/ 13 января 2020

Я использую EntityRepositories в качестве службы в своем приложении. Все работает нормально, но при тестировании моих форм с TypeTestCase, EntityManager не может быть создан для EntityType полей формы, потому что EntityManager вводится вместо Manager.

Вот мой код, частично основанный на этом ответе:

<?php

use App\Entity\Bar;
use App\Entity\Foo;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\EntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Bridge\Doctrine\Test\DoctrineTestHelper;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Test\TypeTestCase;

class FooType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)  // phpcs:ignore
    {
        $builder->add(
            'bar',
            EntityType::class,
            [
                'class' => Bar::class,
                'query_builder' => static function (EntityRepository $er) {
                    return $er->createQueryBuilder('bar');
                },
            ]
        );
    }
}
final class BarRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Bar::class);
    }
}

class FooTypeTest extends TypeTestCase
{
    protected function setUp() : void
    {
        $this->entityManager   = DoctrineTestHelper::createTestEntityManager();

        // ...

        parent::setUp();
    }
    public function testSubmitValidData()
    {
        $foo = new Foo();
        $form = $this->factory->create(FooType::class, $foo);
    }
}

При выполнении этого теста я получаю следующее сообщение об ошибке:

TypeError: Аргумент 1 передан в BarRepository :: __ construct () должен реализовывать интерфейс Doctrine \ Persistence \ ManagerRegistry, заданный экземпляр Doctrine \ ORM \ EntityManager, вызываемый в vendor / doctrine / orm / lib / Doctrine / ORM / Repository / DefaultRepositoryFactory. php в строке 69

Я использую Symfony 4.4.2, доктрина / doctrine -пакет 1.12.6, доктрина / orm v2.7.0, symfony / phpunit-bridge v5.0.2 и phpunit / phpunit 8.5.2 .

Есть идеи, как использовать TypeTestCase при использовании ServiceEntityRepository?

...