1
votes

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);
        }
    }
1

1 Answers

0
votes

I'm also looking for solution for this problem.

For now I suggest to use TestObject setters. Example:

    $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 allows me to pass assertion

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

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