2012-07-05 23 views
7

बिना परीक्षण मान लीजिए मैं एक कार्रवाई की है। सेलेनियम का उपयोग किए बिना ज़ेंड फ्रेमवर्क में यह आसान है। हम जेन में नकली जीईटी और पोस्ट भी बना सकते हैं। लेकिन मुझे वाईआई में एक ही उदाहरण नहीं मिला है। कृपया सुझाव दे।Yii नियंत्रक कार्रवाई इकाई सेलेनियम

उत्तर

4

वाईआई PHP फ्रेमवर्क कई पहलुओं में बहुत अच्छा है लेकिन यह बहुत दुखद है कि यह आंतरिक रूप से किसी भी तरह के अनुरूपित नियंत्रक एक्शन आउटपुट परीक्षण का समर्थन नहीं करता है। इसमें केवल सेलेनियम आधारित वेब ब्राउज़र विधियां हैं। मैं ज़ेंड में वाईआई आया और ज़ेंड में एक्सपैथ आधारित दावे सहित अच्छे परीक्षण सिस्टम हैं। तो मुझे अपने घटकों/Controller.php के भीतर कोड प्रवाह और कोड को समझना पड़ा। यह किसी भी कोर वाईआई ढांचे को बदलने के बिना किया जा सकता है जो मेरी राय में वाईआई का आकर्षण है।

प्रत्येक ग्राहक कोड में घटक/Controller.php है जो वाईआई में सभी नियंत्रकों के लिए एक सामान्य आधार वर्ग है। और रेंडर एक सीसींट्रोलर विधि है जिसका अर्थ है कि मैं इसे ओवरराइड कर सकता हूं और यूनिट टेस्ट कोड द्वारा उपयोग के लिए व्यू आउटपुट कैप्चर कर सकता हूं।

आपको टेस्ट्रून या उत्पादन होने की पहचान करने के लिए एक रनमोड पैरा (config/main.php में) की आवश्यकता होगी। उत्पादन आउटपुट में बस प्रतिबिंबित किया जाता है जबकि हम testrun में कुछ भी गूंज नहीं सकते हैं (बस इकाई परीक्षण रिपोर्ट खराब करता है)। परीक्षण कोड में आपको $ render_output में आउटपुट मिलता है जिस पर आप रैपर xpath या स्ट्रॉप्स चेक पर जोर दे सकते हैं। यह हैक सबसे अच्छा नहीं है लेकिन नौकरी सिर्फ ठीक है।

function render($view,$data=null,$return=false) 
{ 
    $out = parent::render($view,$data,true); 

    if(isset(Yii::app()->params['runmode']) 
     && Yii::app()->params['runmode'] == 'test') 
    { 
     global $render_output; 
     return $render_output = $out; 
    } 

    if($return) 
     return $out; 
    else 
     echo $out; 

} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^