7

我不断收到以下错误:

There was 1 error:

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

但是当我导航到 localhost/login 时,我的表单会填充正确的内容。那行说...

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

导致错误。我的测试有什么问题?

功能测试:

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

树枝视图:

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

4 回答 4

19

Vineet 的回答是正确的,但是......在我看来,从按钮中获取形式并不是一个好主意。更好的尝试:

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

或更改类、ID 等的名称。在一个视图上,可以多于 1 个具有相同提交值的表单

于 2014-07-30T11:04:10.227 回答
7

开始在 symfony2 中进行功能测试,发现你的问题没有答案,所以我们开始吧,

selectButton 方法将实际的按钮文本作为字符串参数。因此,如果您的按钮是“请提交我的表格”,那将是您的文本。

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

查看 Andrew Stackoverflow的答案

于 2013-10-21T06:35:12.373 回答
0

好的,这就是我遇到此错误的原因以及我如何解决它。

(使用Goutte)爬虫就像一个带有 GET 的浏览器。

所以,在做的时候:

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

爬虫试图到达http://localhost/login

因此,基本上,我将其更改为:

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

site.dev是我的 symfony 项目的虚拟主机。

希望能帮助到你!

于 2014-05-12T12:16:28.647 回答
0

selectButton()name按图像或alt值选择按钮。

于 2013-07-13T08:38:51.287 回答