6

私は次の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);
}

ただし、フィールドが入力されていないことがわかります。拡張ルールを適切に単体テストするにはどうすればよいですか?

4

1 に答える 1

5

YiiはCUploadedFileを使用していることがわかっているので、ファイルのアップロードには、モデルのファイル属性を初期化するために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'

したがって、最終的には、実際にはどこにもファイルは必要ありません。テストするには、ファイルの情報だけで十分です。

于 2012-04-29T12:27:00.000 に答える