我有以下uploadform模型
class TestUploadForm extends CFormModel
{
public $test;
public function rules()
{
return array(
array(test, 'file', 'types' => 'zip, rar'),
);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我该如何对此进行单元测试?我尝试过类似的东西:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,这一直告诉我该字段尚未填写.如何正确地对扩展规则进行单元测试?
我们知道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);
}
}
Run Code Online (Sandbox Code Playgroud)
该CFileValidator考虑到确定类型文件的扩展名,所以要测试验证你必须不断变化的名称$testFile,即$testFile['name']='correctname.rar'.
所以最后我们并不需要任何地方的文件,只需要文件的信息即可测试.
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |