Pregunta Yii - Model Unittesting un formulario de carga


Tengo el siguiente modelo 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 hacer una prueba de unidad? He intentado algo 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, eso me sigue diciendo que el campo no se ha completado. ¿Cómo puedo probar adecuadamente las reglas de extensión?


6
2018-04-29 06:44


origen


Respuestas:


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

Podemos usar el constructor para inicializar 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);
    }
}

los CFileValidator toma en cuenta el extensión de archivo para determinar el tipo, así que para probar su validador tendrá que seguir cambiando el nombre del $testFile, es decir $testFile['name']='correctname.rar'.

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


5
2018-04-29 12:27