2012-12-17 13 views
11

मैं मुसीबत चेक बॉक्स कि एक सरणी का हिस्सा हैं (यानी एक से अधिक और विस्तार का चयन विजेट)Symfony2 कार्यात्मक परीक्षण चेक बॉक्स का चयन करने के लिए

documentation में उदाहरण

है स्थापित करने के लिए एक Symfony 2 कार्यात्मक परीक्षण लेखन आ रही हैं
$form['registration[interests]']->select(array('symfony', 'cookies')); 

लेकिन यह नहीं दिखाता कि कौन सी एचटीएमएल काम करेगी और यह मेरे साथ काम नहीं करेगी। यहाँ मेरी प्रपत्र की एक cutdown संस्करण है

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

एक बार जब यह यह वहां काम कर रहे मैं

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

मैं कोशिश की है चीज़ें एक मैन्युअल रूप से किए गए प्रपत्र पर जाने के लिए जा रहा हूँ मिल

लेकिन पहली बार यह कहने में विफल रहता है कि select गैर-ऑब्जेक्ट पर चल रहा है और दूसरा Unreachable field "" कहता है।

+1

मैं एक काम अनुक्रम पर ठोकर खाई गए ' $ फॉर्म ['niwa_pictbundle_proxytype [chronologyControls] [5]'] -> टिक(); ' यह सेट में 6 वें (0-आधारित) चेकबॉक्स का चयन करता है। मैं आईडी द्वारा चुनना चाहता हूं, इसलिए अभी भी कुछ अंक हैं :-) – Craig

उत्तर

12

भी रूप में यह []

कहते हैं या अगर यह वास्तव में आप नहीं मदद करता है, तो आप के बजाय कार्रवाई करने के लिए सीधे एक सरणी पोस्ट करने का प्रयास कर सकते हैं में 0 से

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

यह अनुक्रमित कोशिश करो सिम्फनी के फॉर्म चयनकर्ताओं का उपयोग करने के लिए। देखें: Symfony2: Test on ArrayCollection gives "Unreachable field"

आशा है कि उनमें से एक आपकी मदद करेगी।

+0

इसके अलावा, '$ form ['niwa_pictbundle_proxytype [chronologyControls] [0]'] -> टिक(); 'काम करता है। – 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();