Symfony2选择复选框的功能测试

Symfony2选择复选框的功能测试,symfony,functional-testing,Symfony,Functional Testing,我在编写Symfony 2功能测试以设置作为数组一部分的复选框时遇到问题(例如,多重和扩展的select小部件) 在示例中,示例是 $form['registration[interests]']->select(array('symfony', 'cookies')); 但是它没有显示什么html可以使用,它也不能使用我的html。这是我表格的缩略版本 <form class="proxy" action="/proxy/13/update" method="post" >

我在编写Symfony 2功能测试以设置作为数组一部分的复选框时遇到问题(例如,多重和扩展的select小部件)

在示例中,示例是

$form['registration[interests]']->select(array('symfony', 'cookies'));
但是它没有显示什么html可以使用,它也不能使用我的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>   
但是第一个失败,说明
select
正在非对象上运行,第二个失败,说明
Unreachable field”“

Try

$form['niwa_pictbundle_proxytype[chronologyControls]'][0]->tick();
它从0开始索引它,甚至以它所说的形式[]

或者,如果它对您没有帮助,您可以尝试直接将数组发布到操作中,而不是使用symfony的表单选择器。见:


希望其中一个能帮助您。

我认为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();

我偶然发现了一个工作序列
$form['niwa_pictbundle_proxytype[chronologyControls][5]]->tick()选择集合中的第6个(基于0)复选框。我宁愿按ID进行选择,因此仍有一些要点需要考虑:-)另外,
$form['niwa\u pictbundle\u proxytype[chronologyControls][0]]->tick()工作。
/**
 * 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();