Symfony2功能测试InvalidArgumentException:当前节点列表为空

Vit*_*lyP 11 phpunit functional-testing symfony

我得到"InvalidArgumentException:当前节点列表为空." 通过PHPUnit运行功能测试.这是我写的测试:

public function testAdd()
{
    $client = static::createClientWithAuthentication('main');

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

    $send_button = $crawler->selectButton('submit');

    $form = $send_button->form(array(
        'PrCompany[email]' => 'test@example.ua',
        'PrCompany[first_name]' => 'Anton',
        'PrCompany[last_name]' => 'Tverdiuh',
        'PrCompany[timezone]' => 'Europe/Amsterdam'
    ));

    $form['PrCompany[companies][1]']->tick();

    $client->submit($form);


    $this->assertTrue($crawler->filter('html:contains("User is invited")')->count() > 0);

}
Run Code Online (Sandbox Code Playgroud)

gre*_*ire 12

您可以使用调试问题 var_dump($client->getResponse()->getContent());

另外,我认为你应该这样写:

$crawler = $client->submit($form);
Run Code Online (Sandbox Code Playgroud)

否则,您将在表单提交之前测试第一个URL的响应.


And*_*son 7

我也在努力解决这个问题,似乎该selectButton方法触发了这个错误.

在阅读了DOM Crawler文档之后,我发现该selectButton方法将实际的按钮文本作为字符串参数.因此,如果您的按钮是"请提交我的表格",那将是您的文字.

它确实采用不同的参数,如下所示(取自文档)

A selectButton() method is available on the Crawler which returns another 
Crawler that matches a button (input[type=submit], input[type=image], 
or a button) with the given text.
Run Code Online (Sandbox Code Playgroud)

编辑

在最终成功完成测试后,我还建议您按照此示例来测试表单:

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'https://github.com/login');

$form = $crawler->selectButton('Log in')->form();
$form['login'] = 'symfonyfan';
$form['password'] = 'anypass';

$crawler = $client->submit($form);
$this->assertTrue($crawler->filter('html:contains("Welcome Back")')->count() > 0);
Run Code Online (Sandbox Code Playgroud)

主要区别在于,我使用了Goutte捆绑包,我用packagist的composer安装(在我的情况下,我添加了"fabpot/goutte": "1.0.*@dev")