在 Laravel 中测试 Input::hasFile

标签 testing laravel file-upload phpunit facade

我在用

if (Input::hasFile('index')) doSomething();

检查文件是否上传。

现在我想编写一个 PHPUnit 测试用例,其中系统需要像上传“索引”文件一样运行。

Input::shouldReceive('hasFile')->andReturn(true)

不起作用。

在 laravel 文档中也有一条注释:你不应该模拟 Request 门面。相反,在运行测试时将所需的输入传递给调用方法。

所以也许这毕竟不是一个好主意。

我尝试模拟\Symfony\Component\HttpFoundation\File\UploadedFile 并将其传递给我的调用方法,但是在我为系统期望的所有方法定义“shouldReceive”之后它仍然无法正常工作。

有什么方法可以测试调用,以便 Input::hasFile 无需上传实际文件就返回 TRUE?

谢谢

最佳答案

我不确定您是如何编写模拟测试代码的。但您可以通过以下方式尝试:

$mockInput = Mockery::mock('\Illuminate\Http\Request');
$mockInput->shouldReceive('file')->andReturn($my_test_data);
Input::swap($mockInput);

希望这对您有所帮助。

file 这里是在你的表单或 API 中输入名称来接收上传的文件。您可以将其更改为您的参数名称。

关于在 Laravel 中测试 Input::hasFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194261/

相关文章:

mysql - 在 Laravel 中获得最高分

php - 无法使用 php 将图像上传和存储到数据库

javascript - HTML/Javascript 在文件上传前访问 EXIF 数据

mysql - 尝试将 DateTimePicker 中的值插入数据库,但导致日期时间格式无效

javascript - 带有包含文件的 JSON 对象的 POST 请求

arrays - 需要添加代码以将空数组返回为 null

reactjs - 如何避免 React Jest 测试中的 "False positive"覆盖率

java - 为什么 Spring TestExecution ExceptionHandler Tests 的 ATestClass 的测试不会失败?

javascript - 我怎样才能在 Jasmine 中拥有 beforeAll 功能? (不是 coffeeScript)

php - 在 Laravel 5.2 中流式传输 PDF 文件