2015-04-22 11 views
6

मैंने एक फॉर्म अनुरोध वर्ग बनाया और नियमों का एक समूह परिभाषित किया। अब मैं यह देखने के लिए इन नियमों का परीक्षण करना चाहता हूं कि व्यवहार हमारी अपेक्षाओं को पूरा करता है या नहीं।लार्वेल 5 में फॉर्म अनुरोध नियमों का परीक्षण कैसे करें?

मैं इसे पूरा करने के लिए एक परीक्षा कैसे लिख सकता हूं?

आपके उत्तरों के लिए अग्रिम धन्यवाद!

अद्यतन: अधिक सटीक रूप से, मैं एक यूनिट परीक्षण लिखना चाहता हूं जो उदा। यदि एक बुरी तरह से स्वरूपित ईमेल सत्यापन पास करता है या नहीं। समस्या यह है कि मुझे नहीं पता कि नकली इनपुट के साथ अनुरोध का नया उदाहरण कैसे बनाया जाए।

+1

यहां एक समान प्रतिक्रिया है: http://stackoverflow.com/questions/36978147/unit-test-laravels-formrequest –

उत्तर

2

आप

public function store(MyRequest $request) 

HTML प्रपत्र बना सकते हैं और विभिन्न मूल्यों के साथ इसे भरने की कोशिश उदाहरण

के लिए, नियंत्रक समारोह में अपने फ़ॉर्म अनुरोध वर्ग की आवश्यकता है। यदि सत्यापन विफल रहता है तो आपको सत्र में संदेश मिलेंगे, अगर यह सफल होता है तो आप नियंत्रक फ़ंक्शन में आ जाते हैं।

जब यूनिट परीक्षण तब यूआरएल को कॉल करता है और सरणी के रूप में परीक्षण के लिए मान जोड़ता है। लैरवेल डॉक्टर का कहना है कि इसे

$response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content); 
+0

हाय और आपके उत्तर के लिए धन्यवाद! यह वास्तव में मेरे मन में नहीं था हालांकि: मुझे लगता है कि मेरा प्रश्न बल्कि खराब लिखा गया था इसलिए मैंने इसे अपडेट किया। मैं जो करने की कोशिश कर रहा हूं वह यह जांचने के लिए एक यूनिट टेस्ट लिखता है कि मेरे द्वारा लिखे गए सत्यापन नियम सही हैं या नहीं। – kant312

+0

मेरे उत्तर में भी सुधार हुआ –

+0

धन्यवाद! यह चाल है ^^ – kant312

8

स्वीकार्य उत्तर एक साथ प्रमाणीकरण और सत्यापन दोनों का परीक्षण करता है। आप अलग से इन समारोह का परीक्षण करना चाहते हैं तो आप ऐसा कर सकते हैं:

परीक्षण rules():

$attributes = ['aa' => 'asd']; 
$request = new MyRequest(); 
$rules = $request->rules(); 
$validator = Validator::make($attributes, $rules); 
$fails = $validator->fails(); 
$this->assertEquals(false, $fails); 

परीक्षण authorize():

$user = factory(User::class)->create(); 
$this->actingAs($user); 
$request = new MyRequest(); 
$request->setContainer($this->app); 
$attributes = ['aa' => 'asd']; 
$request->initialize([], $attributes); 
$this->app->instance('request', $request); 
$authorized = $request->authorize(); 
$this->assertEquals(true, $authorized); 

आप रखने के लिए आधार वर्ग में कुछ सहायक तरीकों बनाना चाहिए परीक्षण DRY।

+0

कितना जटिल आपका सत्यापन तर्क है (उदाहरण के लिए, यदि आप अपने 'अनुरोध' वर्ग में कोड के माध्यम से 'नियम' सरणी को जोड़ रहे हैं), तो आप इसे जोड़कर अपने '$ विशेषताएँ' सरणी को अपने कस्टम 'अनुरोध' वर्ग में असाइन करना चाहेंगे आपके 'अनुरोध' ऑब्जेक्ट को बनाने के बाद लाइन: '$ request-> प्रतिस्थापित करें ($ विशेषताएँ);' – mounty

+0

मुझे एक इकाई परीक्षण में आपका आयात 'सत्यापनकर्ता' कैसे समझने में समस्या हो रही है। यह एक मुखौटा वर्ग है, है ना? – Zac

+0

@Zac: हाँ आप सही हैं। आपको इल्यूमिनेट \ Support \ Facades \ Validator से वैलिडेटर आयात करने की आवश्यकता है। – Marco

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