2012-04-29 7 views
6

मैं निम्नलिखित uploadform मॉडलYii - मॉडल Unittesting एक अपलोड प्रपत्र

class TestUploadForm extends CFormModel 
{ 
public $test; 

public function rules() 
{ 
    return array(
     array(test, 'file', 'types' => 'zip, rar'), 
    ); 
} 

मेरा प्रश्न है, मैं कैसे इकाई परीक्षण कर सकते हैं इस? मैं की तरह कुछ की कोशिश की है:

public $testFile = 'fixtures/files/yii-1.1.0-validator-cheatsheet.pdf'; 

public function testValidators() 
{ 
    $testUpload = new TestUploadForm; 

    $testUpload->test = $this->testFile ; 
    assertTrue($testUpload ->validate()); 

    $errors= $testUpload ->errors; 
    assertEmpty($errors); 
} 

हालांकि, इससे मुझे फ़ील्ड भरना नहीं किया गया है कह रहता है मैं कैसे ठीक से इकाई विस्तार नियमों का परीक्षण कर सकते हैं।?

+0

+1। 'दस्तावेज़' फ़ील्ड क्या होना चाहिए? और आपने $ टेस्ट फ़ील्ड क्यों सेट नहीं किया है? –

+0

'दस्तावेज़' फ़ील्ड एक स्ट्रिंग है? –

+0

woeps, खराब कॉपी पेस्ट। परीक्षण = दस्तावेज। – SnIpY

उत्तर

5

जैसा कि हम जानते हैं कि Yii फ़ाइल अपलोड के लिए CUploadedFile का उपयोग करता है, हमें मॉडल की फ़ाइल विशेषता आरंभ करने के लिए इसका उपयोग करना होगा।

हम constructor to initialize फ़ाइल गुण का उपयोग कर सकते new CUploadedFile($names, $tmp_names, $types, $sizes, $errors);

इसलिए हम ऐसा कर सकते हैं:

public ValidatorTest extends CTestCase{ 

    public $testFile = array(
     'name'=>'yii-1.1.0-validator-cheatsheet.pdf', 
     'tmp_name'=>'/private/var/tmp/phpvVRwKT', 
     'type'=>'application/pdf', 
     'size'=>100, 
     'error'=>0 
    ); 

    public function testValidators() 
    { 
     $testUpload = new TestUploadForm; 

     $testUpload->test = new CUploadedFile($this->testFile['name'],$this->testFile['tmp_name'],$this->testFile['type'],$this->testFile['size'],$this->testFile['error']); 
     $this->assertTrue($testUpload->validate()); 

     $errors= $testUpload->errors; 
     $this->assertEmpty($errors); 
    } 
} 

CFileValidator खाता file extension for determining type में ले जाता है, तो आपके सत्यापनकर्ता परीक्षण करने के लिए आप को बदलने रखने के लिए होगा $testFile का नाम, यानी $testFile['name']='correctname.rar'

तो अंत में हमें वास्तव में कहीं भी फ़ाइल की आवश्यकता नहीं है, बस फ़ाइल की जानकारी परीक्षण करने के लिए पर्याप्त है।