2012-04-29 12 views
6

tengo el siguiente modelo UploadFormYu - Modelo prueba unitaria de un formulario de carga

class TestUploadForm extends CFormModel 
{ 
public $test; 

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

Mi pregunta es, ¿Cómo puedo probar esta unidad? He intentado algo así como:

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

sin embargo, que me dice que el campo no ha sido rellenado correctamente ¿Cómo puedo unidad de probar las reglas de extensión.?

+0

+1. ¿Qué se supone que es el campo 'document'? y ¿por qué no has establecido el campo $ test? –

+0

es 'document' field una cadena? –

+0

woeps, mala copia pegar. prueba = documento. – SnIpY

Respuesta

5

Como sabemos que Yii usa CUploadedFile, para subir archivos, tenemos que usarlo para inicializar el atributo de archivo del modelo.

Podemos utilizar el constructor to initialize el atributo de archivo new CUploadedFile($names, $tmp_names, $types, $sizes, $errors);

Por lo tanto podemos hacer esto:

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

El CFileValidator tiene en cuenta la file extension for determining type, por lo que para probar su validador que tendrá que seguir cambiando el nombre del $testFile, es decir, $testFile['name']='correctname.rar'.

Así que finalmente no necesitamos un archivo en ninguna parte, solo la información del archivo es suficiente para probar.

Cuestiones relacionadas