Laravel测试表单按压方法不起作用

时间:2016-04-11 23:58:43

标签: laravel phpunit

我正试图通过测试覆盖我的项目并遇到问题。

TestCase的“press”方法失败,出现'InvalidArgumentException:Unreachable field“”'

然而,“see”方法会看到所需的按钮

除了另一页上的另一个表格测试

调试时间向我显示问题可能在于问题表单有多个(使用此方括号[])输入

测试失败的代码

$this->type($params['from'], 'from[]');
$this->type($params['event'], 'event[]');
$this->type($params['class'], 'class[]');
$this->type($params['method'], 'method[]');
$this->press('save_handlers');

随着形式和按钮,每一件事都很好 按钮:

<button type="submit" class="btn btn-primary btn-block" name="save_handlers">Save</button>

当然按钮位于表格标签

2 个答案:

答案 0 :(得分:2)

实际上,这个问题与括号[]的属性有关。

我遇到了同样的问题。我正在使用带有多个复选框的表单,并且所有表单都具有相同的名称(但ID不同):codes[]。我这样做是为了稍后(在控制器中)检索它们只是作为一个值数组。

<input id="perm-0" type="checkbox" name="codes[]" value="perm-0" />
<input id="perm-1" type="checkbox" name="codes[]" value="perm-1" />
<input id="perm-2" type="checkbox" name="codes[]" value="perm-2" />

我的朋友var_dump()告诉我,解析表单输入的Symfony组件在我使用codes[]并且括号内没有任何内容时不喜欢它。它被视为两个字段:"codes""",而不是codes[]。这导致Unreachable field ""错误。

我发现一个简单的解决方案是简单地为codes[]数组添加一个显式索引:

<input id="perm-0" type="checkbox" name="codes[0]" value="perm-0" />
<input id="perm-1" type="checkbox" name="codes[1]" value="perm-1" />
<input id="perm-2" type="checkbox" name="codes[2]" value="perm-2" />

这样每个复选框都与其他复选框不同,方法press()不再导致错误。 看来这不会影响我的控制器中生成的数组的处理。

答案 1 :(得分:1)

This seems rather confusing seeing as the docs state this:

"Press" a button with the given text or name.

While the docblock above the actual press method states the following:

Submit a form using the button with the given text value.

So instead of using the value of the name attribute (save_handler) use the actual text (Save).

$this->press('Save');