Sto utilizzando phpunit per eseguire test funzionali ma sto riscontrando un problema con alcuni moduli. Il problema è che phpunit non è a conoscenza di JS e ho un modulo con una casella di selezione popolata dinamicamente che richiede jQuery.Symfony2 Test funzionale: passaggio diretto dei dati del modulo
Quindi ho bisogno di passare direttamente i dati del modulo. Il "libro" fornisce il seguente esempio:
// Directly submit a form (but using the Crawler is easier!)
$client->request('POST', '/submit', array('name' => 'Fabien'));
Quando ho utilizzato questo esempio, il controller non ha ricevuto alcun dato del modulo. Inizialmente ho visto che passare la chiave dell'array 'nome' non era corretto nella mia situazione in quanto avevo bisogno del nome del modulo che era 'timesheet' nel mio codice. Così ho provato qualcosa del tipo:
$client->request('POST', '/timesheet/create', array('timesheet[project]' => '100'));
Ma questo ancora non ha funzionato. Nel controllore ho cercato di capire cosa stava succedendo e che cosa se veniva ricevuto nulla:
$postData = $request->request->get('timesheet');
$project = $postData['project'];
questo non ha funzionato e $ progetto rimase vuota. Tuttavia se ho usato il seguente codice ho ottenuto il valore:
$project = $request->request->get('timesheet[project]');
Ma chiaramente non è quello che voglio. Almeno se posso vedere che ci sono alcuni dati POST. Il mio ultimo tentativo è stato quello di provare il seguente nel metodo di prova:
$this->crawler = $this->client->request('POST', '/timesheet/create/', array('timesheet' => array(project => '100'));
Così sto cercando di passare una matrice 'scheda attività' come il primo elemento della matrice di parametri richiesta. Ma con questo ottengo l'errore:
Symfony\Component\Form\Exception\UnexpectedTypeException: Expected argument of type "array", "string" given (uncaught exception) at /mnt/hgfs/pmt/src/vendor/symfony/src/Symfony/Component/Form/Form.php line 489
Sarei molto felice se qualcuno può espandersi su ciò che è nel 'libro' di come dovrei ottenere questo lavoro.
Modulo legano controller:
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$postData = $request->request->get('timesheet');
$project = $postData['project'];
$timesheetmanager = $this->get('wlp_pmt.timesheet_db_access');
$timesheetmanager->editTimesheet($timesheet);
return $this->redirect($this->generateUrl('timesheet_list'));
}
}
Il tuo ultimo tentativo guarda bene a me. Si prega di incollare parte del controller in cui si associa il modulo. Inoltre, avete letto il capitolo della documentazione sui test funzionali (http://symfony.com/doc/2.0/libro/testing.html # forme)? Potresti provare a manipolare l'elemento del modulo. –
Ho aggiunto la parte relativa al controller adesso. Ho letto un paio di volte il capitolo del libro sui test funzionali cercando qualcosa che mi sia sfuggito. Quando suggerisci di manipolare l'elemento del modulo, intendi aggiungere i dati nel test funzionale al modulo? Questo non è possibile in quanto il modulo ha una selezione dinamica popolata usando AJAX. Quindi è vuoto e nulla può essere selezionato, quindi ho bisogno di inviare i contenuti del modulo al controller. – DanF7