我在測試一些自定義類型時已經遇到同樣的問題。
這裏是我弄明白(由嘲諷的EntityType)的方式,
首先,確保你的測試類擴展TypeTestCase,
class MyTypeTest extends TypeTestCase
{
// ...
}
然後,添加一個preloaded extension您form factory在爲了考慮到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)
}
最後,添加一個Entity Type模擬到您的preloaded extension。
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()));
}
但是,你可能需要...
嘲笑registry是DoctrineType調用它的默認構造函數時,因爲它使用的setDefaultOptions()
需要的參數(請記住,EntityType延伸DoctrineType)考慮您的Entity field的class和property選項。
你可能會需要嘲笑的EntityType如下:
$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'));
請,提供相關的代碼。謝謝 – DonCallisto 2013-05-03 09:29:19
添加代碼,忘記它吧! – Benny 2013-05-03 09:36:01
對我來說似乎沒有任何錯誤,但肯定我們錯過了一些東西... – DonCallisto 2013-05-03 09:45:17