2016-05-02 12 views
12

मैं विभिन्न कस्टम FormRequest इनपुट का परीक्षण करने की कोशिश कर रहा हूं।यूनिट टेस्ट लैरावेल का फॉर्मआरक्वेट

  1. $this->call(…) विधि का उपयोग का सुझाव और उम्मीद मूल्य (link to answer) साथ response जोर: मैं समाधान है कि पाया। यह अधिक है, क्योंकि यह रूटिंग और नियंत्रकों पर प्रत्यक्ष निर्भरता बनाता है।

  2. टेलर के परीक्षण, Laravel फ्रेमवर्कfound intests/Foundation/FoundationFormRequestTest.php से। वहाँ बहुत मज़ाकिया और उपर है।

मैं एक समाधान के लिए देख रहा हूँ जहाँ मैं कर सकते हैं नियमों के विरुद्ध इकाई परीक्षण व्यक्तिगत क्षेत्र आदानों (एक ही अनुरोध में अन्य क्षेत्रों से स्वतंत्र)।

नमूना FormRequest:

public function rules() 
{ 
    return [ 
     'first_name' => 'required|between:2,50|alpha', 
     'last_name' => 'required|between:2,50|alpha', 
     'email'  => 'required|email|unique:users,email', 
     'username' => 'required|between:6,50|alpha_num|unique:users,username', 
     'password' => 'required|between:8,50|alpha_num|confirmed', 
    ]; 
} 

वांछित टेस्ट:

public function testFirstNameField() 
{ 
    // assertFalse, required 
    // ... 

    // assertTrue, required 
    // ... 

    // assertFalse, between 
    // ... 
} 

public function testLastNameField() 
{ 
    // ... 
} 

कैसे कर सकते हैं मैं इकाई परीक्षण (ज़ोर) अलगाव में हर क्षेत्र के प्रत्येक सत्यापन नियम और व्यक्तिगत रूप से?

+0

ठीक है, जैसा कि आपने कहा था, फॉर्मवेल की जांच लार्वेल के अंदर की जाती है, इसलिए आपको फिर से परीक्षण करने की आवश्यकता नहीं है, सत्यापन लैरावेल में भी परीक्षण किया जाता है। मुझे वास्तव में वह नहीं मिलता है जो आप वास्तव में परीक्षण करना चाहते हैं ... – PeterPan666

+0

यह एक बहुत ही साधारण बात है, मैं अपने फॉर्म अनुरोधों के लिए निर्धारित सत्यापन नियमों का परीक्षण करना चाहता हूं। –

+0

तो आप परीक्षण करना चाहते हैं कि 'XformRequest :: नियमों' ने '$ first_name ===' आवश्यक 'कहा है? – PeterPan666

उत्तर

12

मुझे Laracast पर एक अच्छा समाधान मिला और मिश्रण में कुछ अनुकूलन जोड़ा गया।

कोड

public function setUp() 
{ 
    parent::setUp(); 
    $this->rules  = (new UserStoreRequest())->rules(); 
    $this->validator = $this->app['validator']; 
} 

/** @test */ 
public function valid_first_name() 
{ 
    $this->assertTrue($this->validateField('first_name', 'jon')); 
    $this->assertTrue($this->validateField('first_name', 'jo')); 
    $this->assertFalse($this->validateField('first_name', 'j')); 
    $this->assertFalse($this->validateField('first_name', '')); 
    $this->assertFalse($this->validateField('first_name', '1')); 
    $this->assertFalse($this->validateField('first_name', 'jon1')); 
} 

protected function getFieldValidator($field, $value) 
{ 
    return $this->validator->make(
     [$field => $value], 
     [$field => $this->rules[$field]] 
    ); 
} 

protected function validateField($field, $value) 
{ 
    return $this->getFieldValidator($field, $value)->passes(); 
} 

अद्यतन

वहाँ एक E2E एक ही समस्या के लिए दृष्टिकोण है। आप POST डेटा को प्रश्न में रूट पर चेक करने के लिए देख सकते हैं और फिर देखें कि प्रतिक्रिया में सत्र त्रुटियां हैं।

$response = $this->json('POST', 
    '/route_in_question', 
    ['first_name' => 'S'] 
); 
$response->assertSessionHasErrors(['first_name'); 
+0

पुष्टि नियम के साथ पासवर्ड के बारे में क्या? –

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