2013-07-13 29 views
6

tôi tiếp tục nhận được lỗi sau:Lỗi khi cố gắng chọn biểu mẫu từ trình thu thập thông tin symfony2?

There was 1 error: 

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

Nhưng khi tôi điều hướng đến localhost/đăng nhập, hình thức của tôi populates với nội dung chính xác. Dòng nói ...

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

đang gây ra lỗi. Có gì sai với thử nghiệm của tôi?

thử nghiệm chức năng:

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

Twig xem:

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

Trả lời

7

Bắt đầu làm thử nghiệm chức năng trong symfony2 và thấy câu hỏi của bạn được trả lời, vì vậy ở đây chúng tôi đi,

phương pháp selectButton mất nút văn bản thực tế như một đối số chuỗi. Vì vậy, nếu nút của bạn là 'gửi mẫu của tôi xin vui lòng', đó sẽ là văn bản của bạn.

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

Thanh toán câu trả lời của Andrew Stackoverflow

+1

Các thông số cũng đòi hỏi các dấu gạch dưới prepended, ví dụ '' '_username''' – Tjorriemorrie

0

selectButton() chọn một nút bằng name hoặc alt giá trị cho hình ảnh.

0

Ok, đây là lý do tại sao tôi đã lỗi này và làm thế nào tôi giải quyết nó.

(Sử dụng Goutte) Trình thu thập thông tin hoạt động giống như trình duyệt có GET.

Vì vậy, khi thực hiện:

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

Crawler đang cố gắng để đạt được http://localhost/login

Vì vậy, về cơ bản, tôi đã thay đổi nó để:

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

site.dev là của tôi máy chủ ảo cho dự án symfony của tôi.

Hy vọng điều đó sẽ hữu ích!

16

Trả lời của Vineet là đúng nhưng ... theo ý kiến ​​của tôi không phải là ý tưởng tốt để lấy mẫu từ nút. thử tốt hơn:

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

hoặc thay đổi tên cho lớp, id vv Trên một quan điểm có thể được nhiều hơn thì 1 mẫu với một thứ giá trị nộp

+3

cảm ơn tuyệt vời, đã tự hỏi nếu có một cách để nhận được các hình thức khác hơn là từ nút! – timhc22

+0

Chắc chắn là lựa chọn tốt nhất vì văn bản có thể thay đổi và không được phản ánh trên mặt dev (phụ thuộc vào bản dịch, từ ngữ thay đổi theo yêu cầu của khách hàng ...) – MediaVince

Các vấn đề liên quan