2012-12-17 7 views
11

IはdocumentationSymfony2の機能テストは、チェックボックスを選択し

が例は

(すなわち複数と拡張選択ウィジェット)アレイの一部であるチェックボックスを設定するためにsymfonyの2官能試験を書き込む手間を抱えています
$form['registration[interests]']->select(array('symfony', 'cookies')); 

しかし、どのhtmlが動作するのか、それは私の場合は動作しません。それはそれは私が私が

$form = $crawler->selectButton('Save')->form(); 
$form['niwa_pictbundle_proxytype[chronologyControls]']->select(array('3')); 
$form['niwa_pictbundle_proxytype[chronologyControls][]']->select(array('3')); 
のようなものを試してみました手動で行う形

<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 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が非オブジェクトで実行されていると言い、2番目のメッセージがUnreachable field ""と表示されます。

+1

私は作業シーケンス '上につまずいてきました これは、セット内の6番目(0ベース)のチェックボックスを選択します。私はむしろIDで選択したいので、把握のためにまだいくつかの点があります:-) – 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(); 
関連する問題