2013-07-13 9 views
6

Continuo a ricevere il seguente errore:Errore durante il tentativo di selezionare un modulo dal crawler symfony2?

There was 1 error: 

1) Caremonk\MainSiteBundle\Tests\Controller\SecurityControllerFunctionalTest::testIndex 
InvalidArgumentException: The current node list is empty. 

Ma quando ci si dirige verso il localhost/login, la mia forma popola con il contenuto corretto. La riga che dice ...

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

causa l'errore. Cosa c'è di sbagliato nel mio test?

Test funzionale:

<?php 

namespace Caremonk\MainSiteBundle\Tests\Controller; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class SecurityControllerFunctionalTest extends WebTestCase 
{ 
    public function testIndex() 
    { 
     $client = static::createClient(); 

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

     $form = $crawler->selectButton('login')->form(); 
     $form['username'] = 'testActive'; 
     $form['password'] = 'passwordActive'; 
    } 
} 

vista Twig:

{# src/Acme/SecurityBundle/Resources/views/Security/login.html.twig #} 
{% if error %} 
    <div>{{ error.message }}</div> 
{% endif %} 

<form action="{{ path('caremonk_mainsite_login_check') }}" method="post"> 
    <label for="username">Username:</label> 
    <input type="text" id="username" name="_username" value="{{ last_username }}" /> 

    <label for="password">Password:</label> 
    <input type="password" id="password" name="_password" /> 

    {# 
     If you want to control the URL the user is redirected to on success (more details below) 
     <input type="hidden" name="_target_path" value="/account" /> 
    #} 

    <button type="submit">login</button> 
</form> 

risposta

7

iniziato a fare i test funzionali in Symfony2 e hanno trovato la tua domanda senza risposta, così qui andiamo,

metodo selectButton prende il testo vero e proprio pulsante di come un argomento di tipo stringa. Quindi se il tuo pulsante è "invia il mio modulo per favore", questo sarà il tuo testo.

$form = $crawler->selectButton('submit my form please')->form(); 

Checkout la risposta da Andrew Stackoverflow

+1

I parametri richiedono anche la sottolineatura anteposto, ad esempio, '' '_username''' – Tjorriemorrie

0

selectButton() seleziona un pulsante o namealt valore per le immagini.

0

Ok, ecco perché ho avuto questo errore e come ho risolto.

(Utilizzo di Goutte) Il crawler si comporta come un browser con GET.

Così, quando si fa:

$client = new Client(); 
$crawler = $client->request('GET', '/login'); 

Il crawler sta cercando di raggiungere http://localhost/login

Quindi, in sostanza, ho cambiato in:

$client = new Client(); 
$crawler = $client->request('GET', 'http://site.dev/app_dev.php/login'); 

site.dev essere il mio host virtuale per il mio progetto symfony.

Spero che aiuti!

16

La risposta di Vineet è giusta ma ... secondo me non è una buona idea prendere forma dal pulsante. meglio provare:

$crawler->filter('form[name=yourAwesomeFormName]')->form(); 

o cambiare il nome per la classe, id ecc Su un punto di vista può essere più di 1 modulo con identico valore presentare

+3

grazie incredibili, mi chiedevo se c'era un modo per ottenere il modulo diverso dal pulsante! – timhc22

+0

Sicuramente l'opzione migliore dal momento che il testo potrebbe cambiare e non essere riflesso sul lato dev (a seconda delle traduzioni, del testo modificato dalla richiesta del cliente ...) – MediaVince

Problemi correlati