Ich habe bereits das gleiche Problem beim Testen von einigen meiner angepassten Typen.
Hier ist die Art, wie ich es herausfinden (von EntityType spöttisch),
Zuerst Ihre Testklasse TypeTestCase, in stellen Sie sicher,
class MyTypeTest extends TypeTestCase
{
// ...
}
Dann fügen Sie eine preloaded extension auf Ihre form factory erstreckt Um die EntityType
protected function setUp()
{
parent::setUp();
$this->factory = Forms::createFormFactoryBuilder()
->addExtensions($this->getExtensions())
->getFormFactory();
}
// Where this->getExtensions() returns the EntityType preloaded extension
// (see the last step)
}
zu berücksichtigen
Und schließlich, fügen Sie einen Entity Type Mock zu Ihrem preloaded extension hinzu.
protected function getExtensions()
{
$mockEntityType = $this->getMockBuilder('Symfony\Bridge\Doctrine\Form\Type\EntityType')
->disableOriginalConstructor()
->getMock();
$mockEntityType->expects($this->any())->method('getName')
->will($this->returnValue('entity'));
return array(new PreloadedExtension(array(
$mockEntityType->getName() => $mockEntityType,
), array()));
}
Aber Sie können müssen ...
Mock die registry dass DoctrineType als Parameter übernimmt, wenn die Standard Konstruktor aufrufen, weil sie von setDefaultOptions()
(Beachten Sie, dass EntityType erstreckt DoctrineType) verwendet wird zu berücksichtigen class und property Optionen Ihrer Entity field.
Ihr kann dann müssen die entityType wie folgt verspotten:
$mockEntityManager = $this->getMockBuilder('\Doctrine\ORM\EntityManager')->getMock();
$mockRegistry = $this->getMockBuilder('Doctrine\Bundle\DoctrineBundle\Registry')
->disableOriginalConstructor()
->setMethods(array('getManagerForClass'))
->getMock();
$mockRegistry->expects($this->any())->method('getManagerForClass')
->will($this->returnValue($mockEntityManager));
$mockEntityType = $this->getMockBuilder('Symfony\Bridge\Doctrine\Form\Type\EntityType')
->setMethods(array('getName'))
->setConstructorArgs(array($mockRegistry))
->getMock();
$mockEntityType->expects($this->any())->method('getName')
->will($this->returnValue('entity'));
Bitte , geben Sie den entsprechenden Code an. Danke – DonCallisto
Code hinzugefügt, sry für das Vergessen! – Benny
Mir scheint es gibt keinen Fehler, aber sicher, dass wir etwas vermissen ... – DonCallisto