问题 Symfony2功能测试选择复选框


我在编写Symfony 2功能测试时遇到问题,无法设置属于数组的复选框(即多个和扩展的选择小部件)

在里面 文件 这个例子是

$form['registration[interests]']->select(array('symfony', 'cookies'));

但它没有显示哪些html可以使用它并且它不适用于我的。这是我的表格的缩减版本

<form class="proxy" action="/proxy/13/update" method="post" >
    <input type="checkbox" id="niwa_pictbundle_proxytype_chronologyControls_1" name="niwa_pictbundle_proxytype[chronologyControls][]" value="1" />

    <input type="checkbox" id="niwa_pictbundle_proxytype_chronologyControls_2" name="niwa_pictbundle_proxytype[chronologyControls][]" value="2" />

    <input type="checkbox" id="niwa_pictbundle_proxytype_chronologyControls_3" name="niwa_pictbundle_proxytype[chronologyControls][]" value="3" />
</form>   

一旦它在那里工作,我将转向手动制作的表格

<input type="checkbox" id="13" name="proxyIDs[]" value="13">
<input type="checkbox" id="14" name="proxyIDs[]" value="14">
<input type="checkbox" id="15" name="proxyIDs[]" value="15">

我尝试过类似的东西

$form = $crawler->selectButton('Save')->form();
$form['niwa_pictbundle_proxytype[chronologyControls]']->select(array('3'));
$form['niwa_pictbundle_proxytype[chronologyControls][]']->select(array('3'));

但第一次失败了 select 正在运行一个非对象,第二个说 Unreachable field ""


12840
2017-12-17 00:32


起源

我偶然发现了一个工作序列 $form['niwa_pictbundle_proxytype[chronologyControls][5]']->tick();  这将选择集合中的第6个(从0开始)复选框。我宁愿按ID选择,所以还有一些要点可以抓住:-) - Craig


答案:


尝试

$form['niwa_pictbundle_proxytype[chronologyControls]'][0]->tick();

它甚至以[]的形式将其从0开始索引

或者,如果它对您没有帮助,您可以尝试将数组直接发布到操作而不是使用symfony的表单选择器。看到: Symfony2:对ArrayCollection的测试给出了“无法访问的字段”

希望他们中的一个可以帮到你。


12
2018-04-23 17:23



也, $form['niwa_pictbundle_proxytype[chronologyControls][0]']->tick(); 作品。 - TautrimasPajarskas


我认为2017年最灵活的解决方案是扩展您的测试类:

/**
 * Find checkbox
 * 
 * @param \Symfony\Component\DomCrawler\Form $form
 * @param string $name Field name without trailing '[]'
 * @param string $value
 */
protected function findCheckbox($form, $name, $value)
{
    foreach ($form->offsetGet($name) as $field) {
        $available = $field->availableOptionValues();
        if (strval($value) == reset($available)) {
            return $field;
        }
    }
}

并在测试电话中:

$this->findCheckbox($form, 'niwa_pictbundle_proxytype[chronologyControls]', 3)->tick();

0
2018-03-30 06:44