如何使上传文件对 UnitTest 无效?

Zan*_*n13 2 php unit-testing symfony laravel-5

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

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

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

我需要测试这张支票。
问题是:如何创建无效的上传文件?
( UploadedFileextends Symfony\Component\HttpFoundation\Fileclass 扩展SplFileInfophp 类)

and*_*ber 5

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

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

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

设置 的唯一方法error,因为它是一个私有变量,是通过构造函数:

public function __construct($path, $originalName, $mimeType = null, $size = null, $error = null, $test = false)
Run Code Online (Sandbox Code Playgroud)

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

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

例如,您可以这样做:

$file = new UploadedFile($path, $origName, $mimeType, UPLOAD_ERR_INI_SIZE, true);
Run Code Online (Sandbox Code Playgroud)

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