我在单元测试方面几乎没有经验。我阅读这个symfony食谱章节来测试一个表单类型。收集表单的单元测试
http://symfony.com/doc/current/cookbook/form/unit_testing.html
我的形式是这样的:
public function __construct(SecurityContext $securityContext, \Doctrine\ORM\EntityManager $em)
{
$this->securityContext = $securityContext;
$this->entityManager = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('title', 'text', array('label' => 'title', 'translation_domain' => 'messages', 'attr' => array('maxlength' => 255)))
->add('comments', 'collection', array(
'type' => new CommentType() ,
'allow_add' => false,
'allow_delete' => false,
'label' => false,
'options' => array(
'label' => false,
)
)
)
->add('translations', 'a2lix_translations', array(
'fields' => array(
'coverLetter' => array(
'label' => 'msg.coverLetter',
'field_type' => 'textarea',
'attr' => array('class' => 'rte')
)
)
));
}
现在我写一个类来测试我的形式。
class QuestionnaireControllerTest extends TypeTestCase
{
public function testAddQuestionnaire()
{
$kernel = new \AppKernel('dev', true);
$kernel->boot();
$container = $kernel->getContainer();
$securityContext = $container->get('security.context');
$entityManager = $container->get('doctrine.orm.entity_manager');
$formData = array('title' => 'Exp. title');
$type = new QuestionnaireType($securityContext, $entityManager);
$form = $this->factory->create($type);
$form->submit($formData);
$this->assertTrue($form->isSynchronized());
$view = $form->createView();
$children = $view->children;
foreach (array_keys($formData) as $key) {
$this->assertArrayHasKey($key, $children);
}
}
}
但我对我的测试类有一些问题。
- 这是获取内核的正确方法吗?
- 如何测试表单项目“评论(集合)”,“翻译(a2lix_translations)”?
不幸的是我不会为这些问题找到有用的教程。