有没有人找到一种方法来单元测试依赖于实体字段类型的Symfony表单?
我尝试过本教程:
http://symfony.com/doc/current/cookbook/form/unit_testing.html
包括关于添加表单类型的此部分取决于:
http://symfony.com/doc/current/cookbook/form/unit_testing.html#adding-a-type-your-form-depends-on
但是,似乎实体字段类型依赖于注册表参数,所以我尝试模拟实体字段类型,但现在phpunit报告了其他错误。
由于单元测试表格看起来非常重要,似乎有人必须找到一种方法来完成这项工作。但是,尽管我进行了广泛的搜索,但我还没有找到解决方案。
答案 0 :(得分:0)
您可以完成错误并进行测试,是的。
您最终会收敛的设置将如下所示:
// this is the method to register additional form types as
// in the article http://symfony.com/doc/current/cookbook/form/unit_testing.html#adding-a-type-your-form-depends-on
protected function getExtensions()
{
$entity = $this->mockEntityType();
return [
new PreloadedExtension(
[
$entity->getName() => $entity
],
[]
)
];
}
让这种类型没有爆炸的实际工作:
// extracted out double setup for clarity
private function mockEntityType()
{
$manager = $this->prophesize('Doctrine\Common\Persistence\ObjectManager');
$registry = $this->prophesize('Doctrine\Common\Persistence\ManagerRegistry');
$metadata = $this->prophesize('Doctrine\Common\Persistence\Mapping\ClassMetadata');
$repository = $this->prophesize('Doctrine\Common\Persistence\ObjectRepository');
$repository->findAll()->willReturn([]);
$manager->getClassMetadata(Argument::cetera())->willReturn($metadata->reveal());
$manager->getRepository(Argument::cetera())->willReturn($repository->reveal());
$registry->getManagerForClass(Argument::cetera())->willReturn($manager->reveal());
return new EntityType($registry->reveal());
}
请注意,这是使用自the prohpecy mocking framework
以来随phpunit一起提供的version 4.5.0显示的代码只是设置所有内容以返回任何实体存储库的空数组。根据您的需要进行更改。