php - 如何使UploadedFile对UnitTest无效?

标签 php unit-testing symfony laravel-5

我正在 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,这是默认值。

设置错误的唯一方法是通过构造函数,因为它是私有(private)变量:

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 上传(如果您的测试实际创建文件)

关于php - 如何使UploadedFile对UnitTest无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33259212/

相关文章:

Symfony2、Varnish 和 ESI 导致奇怪的行为

php - SF2 中的 INNER JOIN 与 Doctrine "createQueryBuilder"

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - 使用 php 记录 IP

java - 类的模拟在 Spock 测试用例中不起作用

php - Doctrine2如何处理回滚后更新实体? ("The EntityManager is closed")

php - 在 <select> 中显示 MySQL 数据失败

php - 如何交替检查字符,如果是 X 则用 Y 替换?

c# - mbunit v3 文档

java - 在哪里可以找到 Java 标准库类的单元测试?