测试与具有动态地产生的场的形式的控制器

我有具有动态场的一种形式:测试与具有动态地产生的场的形式的控制器

<?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);

}

);

}

}

我有这样的代码在AJAX:

<script> 

var $groupeCompetence = $('#requete_prestataire_groupeCompetence');

// When sport gets selected ...

$groupeCompetence.change(function() {

// ... retrieve the corresponding form.

var $form = $(this).closest('form');

// Simulate form data, but only include the selected sport value.

var data = {};

data[$groupeCompetence.attr('name')] = $groupeCompetence.val();

// Submit data via AJAX to the form's action path.

$.ajax({

url : $form.attr('action'),

type: $form.attr('method'),

data : data,

success: function(html) {

// Replace current position field ...

$('#requete_prestataire_competence').replaceWith(

// ... with the returned one from the AJAX response.

$(html).find('#requete_prestataire_competence')

);

// Position field now displays the appropriate positions.

}

});

});

</script>

事实上,能力是根据GroupeCompetence动态生成的。

我想在PHPUnit中测试它。

我尝试这样做:

public function testIndexRechercheUtilisateurNonConnecte() 

{

$crawler = $this->client->request('GET', '/');

$form = $crawler->selectButton('requete_prestataire_Rechercher')->form();

$form['requete_prestataire[groupeCompetence]'] = 2;

$form['requete_prestataire[competence]'] = "";

$crawler = $this->client->submit($form);

$this->assertTrue($this->client->getResponse()->isRedirect());

$client->followRedirect();

/*$this->assertEquals(3, $crawler->filter('a [class = "btn-sm btn-primary"]')->count());*/

}

的问题是:$形式[ 'requete_prestataire [能力]']如我说的是动态地生成的。

我希望能够在测试中做ajax请求,然后测试输出。

我该怎么办?

在此先感谢

回答:

我找到了解决办法:

必须禁用验证,并发送的形式,因为它是产生:

$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);

以上是 测试与具有动态地产生的场的形式的控制器 的全部内容, 来源链接: utcz.com/qa/267088.html

回到顶部