Я использую 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
?