2012-04-29 15 views
6

Ich habe folgendes uploadform ModellYü - Model Unittesting ein Upload-Formular

class TestUploadForm extends CFormModel 
{ 
public $test; 

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

Meine Frage ist, wie kann ich Unit-Test das? Ich habe versucht, so etwas wie:

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); 
} 

jedoch, dass hält mich das Feld erzählt wurde nicht ausgefüllt Wie kann ich richtig Einheit testen Sie die Erweiterungsregeln.?

+0

+1. Was soll das Feld "Dokument" sein? und warum hast du das $ test Feld nicht gesetzt? –

+0

ist 'Dokument' Feld eine Zeichenkette? –

+0

Woeps, schlechte Kopie Paste. test = Dokument. – SnIpY

Antwort

5

Da wir wissen, dass Yii CUploadedFile für Datei-Uploads verwendet, müssen wir es verwenden, um das Dateiattribut des Modells zu initialisieren.

Wir verwenden die constructor to initialize das Dateiattribut new CUploadedFile($names, $tmp_names, $types, $sizes, $errors);

Daher können wir dies tun:

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); 
    } 
} 

Die CFileValidator berücksichtigt die file extension for determining type, so dass Ihr Validator zu testen, wird Ihnen halten müssen Ändern der Name der $testFile, dh $testFile['name']='correctname.rar'.

Also schließlich brauchen wir nicht wirklich eine Datei irgendwo, nur die Informationen der Datei ist genug zu testen.