2017-12-28 66 views
0

Ich möchte einen Conroller testen, der eine Seite mit einem Feld generiert, das sich dynamisch mit Ajax ändert. HierTesten eines AJAX-Aufrufs in phpunit/symfony mit Client oder Crawler

ist der Code von 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> 

Wie kann ich diesen Code aus phpunit rufen mit Client oder Crawler?

Ich habe versucht:

$this->client->request(
       'POST', 
       '/', 
       array('requete_prestataire[groupeCompetence]' =>2), 
       array(), 
       array(), 
       array('HTTP_X-Requested-With' => 'XMLHttpRequest', 
        )); 

Aber es funktioniert nicht.

Vielen Dank!

+0

Du hast versucht, eine Anfrage zu stellen, was ist es? Untersuchen Sie die Antwort, indem Sie 'var_dump ($ this-> client-> getResponse() -> getContent())' aufrufen und, falls kein Glück vorliegt, eine Antwort auf die Frage einfügen. –

Antwort

0

fand ich die Lösung:

Sie Validierung deaktivieren müssen, und senden Sie das Formular, wie es erzeugt wurde:

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

hier ist die Erklärung in doc:

doc symfony dom crawler component