2013-09-26 5 views
10

मैंने $this->call($destination, $parameters, 'GET'); का उपयोग कर नियंत्रकों का परीक्षण करने के बारे में बहुत सारे दस्तावेज पढ़े हैं, लेकिन ऐसा लगता है कि यह भी रूट पर निर्भर है, और सही $destination उपयोग।मार्ग का परीक्षण किए बिना लार्वेल में एक नियंत्रक को यूनिट परीक्षण करने का सबसे अच्छा तरीका क्या है

आम तौर पर यह ठीक है, लेकिन एक मार्ग से नियंत्रक तक पहुंच इकाई परीक्षण के लिए सही नहीं लगती है। मैं इकाई को नियंत्रक का परीक्षण करना चाहता हूं, मार्ग नहीं। मार्गों से निपटने के बिना इकाई परीक्षण नियंत्रकों के लिए कोई मानक तरीका है?

क्या मैन्युअल रूप से नियंत्रक को तुरंत चालू कर रहा है और विधि को पर्याप्त रूप से कॉल कर रहा है? जैसे

$controller = new MyController; 
$response = $controller->someMethod($param); 
$this->assertSomething($response); 

शायद नियंत्रक इकाई परीक्षण नहीं किया जाना चाहिए (और केवल स्वीकृति परीक्षण किया है) और मेरे अनुरोध एक संकेत है कि मेरी नियंत्रकों बहुत भारी हो रहा है।

+1

शायद, से हटा दिया गया संभावित, हो सकता है कि। ऐसा नहीं है कि मैं लार्वाले को अच्छी तरह से जानता हूं, लेकिन पहला सवाल है कि आप अपना खुद का प्रयास कर सकते हैं - बस नियंत्रक को तुरंत चालू करना। यदि लैरवेल के साथ कुछ सेवा कंटेनर शामिल हैं और यदि आपका नियंत्रक इसका उपयोग करता है तो आपके पास कुछ सहयोगी हो सकते हैं जिन्हें आपको नकली करने की आवश्यकता है, लेकिन शायद आप इसे स्वयं के टेस्टकेज़ में समाहित कर सकते हैं और यूनिट-परीक्षण नियंत्रकों को रखने के लिए इसका विस्तार कर सकते हैं अधिक सुंदर। लेकिन परीक्षण लिखना कोड लिखना है, अगर आप काम करते हैं तो आपको भी कोशिश करने की ज़रूरत है। – hakre

+0

नियंत्रक को इंस्टेंट करना अभी तक ठीक काम कर रहा है लेकिन मुझे चिंता है कि यह "लैरावेल रास्ता" नहीं है। मैं लैरावेल के अपने टेस्ट केस का विस्तार कर रहा हूं, जो स्वचालित रूप से "ऐप" डीआईसी सेट करता है। – dave1010

+1

ठीक है अगर यह डीआईसी ऐप को परीक्षण युगल के साथ सेट करता है, तो यह शायद परीक्षण के लिए ठीक है। यदि नहीं तो चीजें खराब हो सकती हैं। आपको शायद लैरावेल आईआरसी चैट में थोड़ा सा चर्चा करनी चाहिए, मैं कल्पना कर सकता हूं कि इस प्रकार की फीडबैक वहां चाहती है। वहां लोगों को लार्वेल के बारे में और जानकारी बताने में सक्षम होना चाहिए, तो मैं कर सकता हूं। – hakre

उत्तर

12

आप अपने कार्यों को सीधे कॉल कर सकते हैं:

$response = $this->action('GET', '[email protected]', ['id' => 1]); 
+0

यह एक अच्छा कदम है। क्या मुझे सही HTTP विधि (जैसे 'GET') जाननी है? – dave1010

+0

हां, टेस्टकेस की एक्शन विधि को HTTP विधि की आवश्यकता होती है और आपको अपने परीक्षणों में पूरी तरह से होना चाहिए, इसलिए यह भी एक अच्छा अभ्यास है। –

+1

मेरा मुद्दा यह है कि नियंत्रक (उदाहरण के लिए 'ऑर्डर कंट्रोलर :: शो() ') को रूट की HTTP विधि के साथ जोड़ा जाना चाहिए, और इसके बारे में नहीं जानना चाहिए। – dave1010

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