1

form test return error

Tests\AppBundle\Form\Type\UserPreferencesTypeTest::testUserPreferencesForm Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException: The option "constraints" does not exist. Defined options are: "action", "attr", "auto_initialize", "block_name", "by_reference", "choice_attr", "choice_label", "choice_loader", "choice_name", "choice_translation_domain", "choice_value", "choices", "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".

here is my form

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';
    }

and my form test

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);
        }
    }
vimuth
  • 5,064
  • 33
  • 79
  • 116
majid hussain
  • 31
  • 1
  • 5

1 Answers1

0

I'm also looking for solution for this problem.

For now I suggest to use TestObject setters. Example:

    $formData = array(
        'email' => 'test@gmail.com',
        'surname' => 'Doe',
    );

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

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

This allows me to pass assertion

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

Maybe this is not the best solution, but works as it should

Leszek
  • 182
  • 1
  • 14
  • FYI of course we can leave implementation $formData array, but in my case this array was necessary to other asserts – Leszek Sep 12 '17 at 10:35