2015-04-20 3 views
0

У меня почти нет опыта с точки зрения модульных тестов. Я прочитал эту главу кулинарной книги 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); 
     } 

    } 
} 

Но у меня есть несколько вопросов для моего тестового класса.

  1. Это правильный способ получить ядро?
  2. Как я могу проверить элемент формы «комментарии (сборники)», «переводы (a2lix_translations)»?

К сожалению, я не нашел полезных учебных пособий по этим вопросам.

ответ

0

Когда дело доходит до TypeTest, оно может стать немного странным на самом деле, поскольку оно кажется вне цикла. Я столкнулся с некоторыми аналогичными проблемами и фактически сделал следующее:

1) Что касается ядра: Расширьте KernelTestCase и включите логику TypeTestCase (и супер) в свой тест (или создайте себе реферат). Таким образом, у вас будет более последовательный путь инициализации ядра, а TypeTestCase не будет таким большим, кроме инициализации формы. Возможно, это настраиваемое на самом деле может быть полезно позже.

2) Для того, чтобы получить материал, особенно A2lix загруженную в качестве расширений для тестовых форм, которые вы должны переопределить

protected function getExtensions() 

и возвращает массив

return array(
     new PreloadedExtension(..., array()) 
); 

Для A2lix ... может выглядеть

$gedmoTranslationsType = new GedmoTranslationsType($this->container->get('a2lix_translation_form.gedmo.listener.translations'), $this->container->get('a2lix_translation_form.gedmo.service.translation'), $this->getLocales(), false); 
$gedmoTranslationsLocalesType = new GedmoTranslationsLocalesType(); 
$translationsFields = new TranslationsFieldsType(); 

return array(
    $gedmoTranslationsType->getName() => $gedmoTranslationsType, 
    $gedmoTranslationsLocalesType->getName() => $gedmoTranslationsLocalesType, 
    $translationsFields->getName() => $translationsFields, 
); 

У меня уже есть контейнер и локали в удобных элементах и ​​функциях. Вы должны это сделать.

В целом расширения также станут важными, например. тестирование типов сущностей. Поэтому обобщение этих вещей может оказаться полезным.

Есть много вещей, которые нужно набирать на самом деле, что вы со временем выясните. Надеюсь, это все равно поможет.

Лучшее

Смежные вопросы