2012-04-29 15 views
6

Mam następujący model uploadformYii - model test jednostkowy formą przesyłania

class TestUploadForm extends CFormModel 
{ 
public $test; 

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

Moje pytanie brzmi, w jaki sposób mogę to testy jednostkowe? Próbowałem coś takiego:

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

jednak, że powtarza mi pole nie zostało wypełnione w jaki sposób można prawidłowo jednostki przetestować zasady przedłużaczy.?

+0

+1. jakie powinno być pole "dokumentu"? i dlaczego nie ustawiłeś pola testu $? –

+0

to "dokument" pole ciąg znaków? –

+0

woeps, zła kopia wklej. test = dokument. – SnIpY

Odpowiedz

5

Jak wiemy, Yii używa CUploadedFile, do przesyłania plików, musimy go użyć, aby zainicjować atrybut pliku modelu.

Możemy użyć constructor to initialize atrybut pliku new CUploadedFile($names, $tmp_names, $types, $sizes, $errors);

Stąd możemy to zrobić:

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 uwzględnia file extension for determining type, tak aby przetestować walidator musisz ciągle się zmienia nazwa $testFile, czyli $testFile['name']='correctname.rar'.

W końcu tak naprawdę nie potrzebujemy pliku w dowolnym miejscu, wystarczy informacja o pliku, aby przetestować.

Powiązane problemy