我有一个包含动态字段的表单:
<div></div>
我在ajax中有这段代码:
<div class="container">
<div>
<div class="welcome">Welcome to Happy Heidi's</div>
<div class="header">
<h1>Vintage Fiesta Pottery for Sale</h1></div>
</div>
...
</div>
事实上,根据GroupeCompetence,能力是动态产生的。
我想在PHPUnit中测试它。
我试过了:
<?php
namespace AppBundle\Form;
//uses ...
class AnnonceType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('titre')
->add('description')
->add('groupeCompetence', EntityType::class, [
'class' => 'AppBundle\Entity\GroupeCompetences',
'choice_label' => 'nom',
'placeholder' => 'Sélectionnez votre type de service',
])
->add('prix')
->add('serviceADistance')
->add('ajouter', SubmitType::class);
$formModifier = function (FormInterface $form, GroupeCompetences $groupeCompetences=null){
$competences = null === $groupeCompetences ? array() : $groupeCompetences->getCompetences();
$form->add('competence', EntityType::class, array(
'class' => 'AppBundle\Entity\Competence',
'choice_label' => 'nom',
'placeholder' => 'Choisir une compétence',
'choices' => $competences,
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
// this would be your entity, i.e. CompetenceChoisie
$data = $event->getData();
//var_dump($data);
//die();
$formModifier($event->getForm(), $data->getGroupeCompetence());
}
);
$builder->get('groupeCompetence')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$groupeCompetences = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $groupeCompetences);
}
);
}
}
问题在于: $ form [&#39; requete_prestataire [能力]&#39;] 正如我所说的那样动态生成。
我希望能够在测试中执行ajax请求,然后测试输出。
我该怎么办?
提前致谢
答案 0 :(得分:0)
我找到了解决方案:
您必须禁用验证,并在生成时发送表单:
$crawler = $this->client->request('GET', '/');
$form = $crawler->selectButton('requete_prestataire_Rechercher')->form();
$form['requete_prestataire[groupeCompetence]'] = 2;
$form['requete_prestataire[competence]']->disableValidation()->select(50);
$crawler = $this->client->submit($form);