Yii - Model Unittesting an upload form

扶醉桌前 提交于 2019-12-22 05:33:09

问题


I have the following uploadform model

class TestUploadForm extends CFormModel
{
public $test;

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

My Question is, how can I unit test this? I've tried something like:

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

However, That keeps telling me the field hasn't been filled in. How can I properly unit test the extension rules?


回答1:


As we know that Yii uses CUploadedFile, for file uploads, we have to use it to initialize the file attribute of the model.

We can use the constructor to initialize the file attribute new CUploadedFile($names, $tmp_names, $types, $sizes, $errors);

Hence we can do this:

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

The CFileValidator takes into account the file extension for determining type, so to test your validator you'll have to keep changing the name of the $testFile, i.e $testFile['name']='correctname.rar'.

So finally we do not really need a file anywhere, just the info of the file is enough to test.



来源:https://stackoverflow.com/questions/10370278/yii-model-unittesting-an-upload-form

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!