我在單元測試方面幾乎沒有經驗。我閱讀這個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)」?
不幸的是我不會爲這些問題找到有用的教程。