我正试图通过测试覆盖我的项目并遇到问题。
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>
当然按钮位于表格标签
中答案 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');