2012-12-17 13 views
11

Mam problem pisząc Symfony 2 test funkcjonalny zestaw do wyboru, które są częścią tablicy (czyli wielokrotność i rozszerzony wybierz widget)Symfony2 testy funkcjonalne, aby zaznaczyć pola wyboru

W documentation przykładem jest

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

Ale nie pokazuje, z jakim html będzie działać i nie zadziała z moim. Oto wersja nacięcia mojej postaci

<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> 

Raz dostać pracy tam mam zamiar przenieść się do postaci ręcznie wykonanej

<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"> 

Próbowałem rzeczy jak

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

, ale pierwsza z nich nie powiedzie się, że select jest uruchamiana na obiekcie niebędącym obiektem, a druga to Unreachable field "".

+1

I natknął się na sekwencji roboczej ' $ form ['niwa_pictbundle_proxytype [chronologyControls] [5]'] -> tick(); ' Powoduje to zaznaczenie szóstego (0) pola wyboru w zestawie. Wolę wybierać według identyfikatora, więc nadal jest kilka punktów do zgarnięcia :-) – Craig

Odpowiedz

12

Spróbuj

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

indeksuje go od 0 nawet w formie to mówi []

A jeśli tak naprawdę nie pomaga, można spróbować księgowania tablicę bezpośrednio do działania zamiast korzystania z selektorów formularza symfony. Zobacz: Symfony2: Test on ArrayCollection gives "Unreachable field"

Mam nadzieję, że jedno z nich ci pomoże.

+0

Również, '$ form ['niwa_pictbundle_proxytype [chronologyControls] [0]'] -> tick();' działa. – TautrimasPajarskas

0

Myślę, że najbardziej kuloodporne roztwór roboczy w roku 2017 jest rozszerzenie swojej klasy badawczej:

/** 
* 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; 
     } 
    } 
} 

I w wywołaniu testu:

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