我在用
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/