2012-12-17 50 views
11

我無法寫入的Symfony 2功能測試以設置是陣列的一部分(即,多個和擴大選擇窗口小部件)Symfony2的功能測試來選擇複選框

documentation的例子是

複選框
$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 ""

+1

我無意中發現了一個工作序列 ' $ form ['niwa_pictbundle_proxytype [chronologyControls] [5]'] - > tick();' 這將選擇集合中的第6個(從0開始)複選框。我寧願選擇身份證,所以仍然有一些積分爭奪:-) – Craig

回答

12

即使它說[]

或者如果它並沒有真正幫助你,你可以嘗試直接過帳陣列的行動,而不是形式,嘗試從0

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

它的索引它使用symfony的表單選擇器。參見:Symfony2: Test on ArrayCollection gives "Unreachable field"

希望其中一個可以幫助你。

+0

另外,'$ form ['niwa_pictbundle_proxytype [chronologyControls] [0]'] - > tick();'工作。 – TautrimasPajarskas

0

我覺得最防彈解決方案在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();