2017-05-08 67 views
0

形式测试返回错误symfony3 + PHPUnit的形式测试问题

测试\的appbundle \表格\型号\ UserPreferencesTypeTest :: testUserPreferencesForm 的Symfony \分量\ OptionsResolver \异常\ UndefinedOptionsException:选项 “约束” 不存在。定义的选项是:“action”,“attr”,“auto_initialize”,“block_name”,“by_reference”,“choice_attr”,“choice_label”,“choice_loader”,“choice_name”,“choice_translation_domain”,“choice_value” “,”choices_as_values“,”compound“,”data“,”data_class“,”disabled“,”empty_data“,”error_bubbling“,”expanded“,”group_by“,”inherit_data“,”label“,”label_attr“, label_format,mapped,method,multiple,placeholder,post_max_size_message,preferred_choices,property_path,required,translation_domain,trim,upload_max_size_message

这里是我的形式

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('global_review_count_threshold', ChoiceType::class, array(
      'choices' => array(
       '5%' => 5, 
       '10%' => 10, 
       '15%' => 15, 
       '20%' => 20, 
       '25%' => 25, 
       '30%' => 30, 
       '35%' => 35, 
       '40%' => 40, 
       '45%' => 45, 
       '50%' => 50, 
      ), 'constraints' => array(new NotBlank(),), 'label' => "Global Review Count Threshold", 
      'data' => $options['review_count_choice'] 
     )); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'review_count_choice' => null, 
     )); 
    } 

    public function getName() 
    { 
     return 'app_bundle_user_preferences_form'; 
    } 

和我的形式测试

public function testUserPreferencesForm() 
    { 
     $formData = array(
      'global_review_count_threshold' => '10%', 
     ); 

     $form = $this->factory->create(UserPreferencesType::class); 

     //$object = TestObject::fromArray($formData); 

     $form->submit($formData); 

     $this->assertTrue($form->isSynchronized()); 
     //$this->assertEquals($object, $form->getData()); 

     $view = $form->createView(); 
     $children = $view->children; 

     foreach (array_keys($formData) as $key) { 
      $this->assertArrayHasKey($key, $children); 
     } 
    } 

回答

0

我也在寻找这个问题的解决方案。

现在我建议使用TestObject制定者。 例子:

$formData = array(
     'email' => '[email protected]', 
     'surname' => 'Doe', 
    ); 

    $form = $this->factory->create(RecipientType::class); 

    $object = new Recipient(); 
    $object->setEmail($formData['email']); 
    $object->setSurname($formData['surname']); 

这让我通过断言

$this->assertEquals($object, $form->getData()); 

也许这是不是最好的解决方案,但做了它应该

+0

FYI当然,我们可以离开执行$ FORMDATA阵列,但在我的情况下,这个数组是其他断言的必要条件 – Leszek