警予 - 模型单元测试上传表单(Yii - Model Unittesting an upload

2019-09-16 20:12发布

我有以下uploadform模型

class TestUploadForm extends CFormModel
{
public $test;

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

我的问题是,我怎么能单元测试呢? 我已经试过类似:

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

然而,不断告诉我该领域尚未填写。我怎样才能正确地进行单元测试的扩展规则?

Answer 1:

正如我们所知,Yii中使用CUploadedFile ,文件上传,我们要用它来初始化该模型的文件属性。

我们可以使用构造函数初始化文件属性new CUploadedFile($names, $tmp_names, $types, $sizes, $errors);

因此,我们可以这样做:

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考虑到确定类型文件的扩展名 ,所以要测试验证你必须不断改变的名称$testFile ,即$testFile['name']='correctname.rar'

所以最后我们并不真的需要一个文件的任何地方,该文件只是信息是足够的测试。



文章来源: Yii - Model Unittesting an upload form
标签: yii phpunit