【问题标题】:Symfony: Functional Test with PRE_SUBMIT Form EventSymfony:使用 PRE_SUBMIT 表单事件进行功能测试
【发布时间】:2021-10-20 07:18:09
【问题描述】:

我正在尝试使用 PRE_SUBMIT 表单测试表单,我的 FormType 类如下所示:

public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('productType', ChoiceType::class, [
                'choices' => [
                    'Software' => 'software',
                    'Television' => 'television',
                    'Giftcard' => 'giftcard',
                    'Bitte wählen' => '',
                ],
            ])
            ->add('productNumber', TextType::class)
            ->add('title', TextType::class)
            ->add('submit', SubmitType::class);

        $builder->addEventListener(
            FormEvents::PRE_SUBMIT,
            function (FormEvent $event)
            {
                $form = $event->getForm();
                $data = $event->getData();

                if ($data['productType'] === 'giftcard') {
                    $form->add('value', TextType::class);
                }
            }
        );
    } 

我不知道怎么做,只有这样提交表单才能达到字段值。

$client->submitForm('Submit', [
            'product[productType]' => 'giftcard',
            'product[productNumber]' => 'C123123',
            'product[title]' => 'TestCard',
        ]);

我不能像这样进行第二次提交。但是第一次提交后表单看起来很好。 希望有人可以帮助我或给我一些建议。

【问题讨论】:

    标签: symfony addeventlistener form-submit functional-testing


    【解决方案1】:

    我用预先提交的表格这样做了。现在它工作正常。 如果您想在此事件中添加新值,请在第一次提交后再次关闭爬虫并将值添加到表单中。

        public function testRedirectAfterCreateGiftcard(): void
        {
            $client = static::createClient([
                'debug' => false,
            ]);
            $crawler = $client->request('GET', 'https://localhost/product/create');
            $client->followRedirects();
    
            $form = $crawler->selectButton('Submit')->form();
            $values = $form->getPhpValues();
            $values['product']['productType'] = 'giftcard';
            $values['product']['productNumber'] = 'B122222';
            $values['product']['title'] = 'Test';
            $client->request($form->getMethod(), $form->getUri(), $values, $form->getPhpFiles());
            $form->setValues($values);
            $client->submitForm('Submit');
    
            $form2 = $client->getCrawler()->selectButton('Submit')->form();
            $values2 = $form2->getPhpValues();
            $values2['product']['value'] = '25';
            $form2->setValues($values2);
            $client->submit($form2);
    
            $this->assertRouteSame('app_product_view', ['productType' => 'giftcard']);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2015-11-28
      相关资源
      最近更新 更多