如何使上传的文件对单元测试无效


How to make UploadedFile invalid for UnitTest?

我正在测试在Laravel 5.1项目中上传文件。

签入验证方法之一如下所示

//assuming $file is instance of UploadedFile class
if ( ! $file->isValid()) {
    /*add errors and return*/
}

我需要测试这个检查。
问题是:如何创建无效的上传文件?
(UploadedFile扩展Symfony'Component'HttpFoundation'File类,扩展SplFileInfo php类(

我经常发现查看库源代码很有帮助:

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/File/UploadedFile.php

您可以看到 isValid 方法检查是否$this->error === UPLOAD_ERR_OK ,这是默认值。

设置 error 的唯一方法是通过构造函数:

public function __construct($path, $originalName, $mimeType = null, $size = null, $error = null, $test = false)

因此,在创建$file对象时,只需确保将$error设置为某些内容即可。以下是所有可用的错误常量:

http://php.net/manual/en/features.file-upload.errors.php

例如,您可以这样做:

$file = new UploadedFile($path, $origName, $mimeType, UPLOAD_ERR_INI_SIZE, true);

测试时需要最后一个参数来禁用检查文件是否通过HTTP上传(以防测试实际创建文件(