2013-07-13 6 views
6

Wciąż otrzymuję następujący błąd:Błąd podczas próby wybrania formularza z robota symfony2?

There was 1 error: 

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

Ale kiedy przejść do localhost/logowania, moja forma zapełnia z właściwą treścią. Linia, która mówi ...

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

powoduje błąd. Co jest nie tak z moim testem?

test funkcjonalny:

<?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'; 
    } 
} 

Gałązka Widok:

{# 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> 

Odpowiedz

7

zaczął robić testów funkcjonalnych w Symfony2 i znaleźć swoje pytanie bez odpowiedzi, więc jedziemy,

metoda selectButton bierze rzeczywisty tekst przycisku jako argument ciąg. Więc jeśli twój przycisk "wyślij mój formularz, proszę", to będzie twój tekst.

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

Zamówienie odpowiedź przez Andrzeja Stackoverflow

+1

Parametry wymagają podkreślenia poprzedzając, na przykład '' '_username'''' – Tjorriemorrie

0

selectButton() wybiera przycisk przez name lub alt wartości dla obrazów.

0

Ok, oto dlaczego miałem ten błąd i jak go rozwiązać.

(Używanie Goutte) Przeszukiwacz działa jak przeglądarka z GET.

Tak więc, gdy robi:

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

Robot stara się dotrzeć http://localhost/login

Więc w zasadzie, zmieniłem go na adres:

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

site.dev jest mój wirtualny host dla mojego projektu symfony.

Mam nadzieję, że pomoże!

16

Odpowiedź Vineet ma rację, ale ... moim zdaniem nie jest to dobry pomysł, aby przyjąć formę z przycisku. Better try:

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

lub zmienić nazwę klasy, id itd. Z jednej widzenia może być więcej niż 1 forma z identyc przedstawić wartość

+3

niesamowite dzięki, zastanawiałem się, czy był sposób na uzyskanie formy innej niż z przycisku! – timhc22

+0

Zdecydowanie najlepsza opcja, ponieważ tekst może się zmienić i nie zostać odzwierciedlony po stronie programisty (w zależności od tłumaczeń, zmian w słowach na życzenie klienta ...) – MediaVince

Powiązane problemy