在 Laravel 4 中模拟输入门面

3
我正在使用这个表单服务。
$files = Input::file('my_file');

我正在尝试测试它,但似乎无法正确模拟输入。文档中指出不要模拟Request外观。虽然它们都指向IOC容器中的同一类,但没有提到Input外观。我已尝试了几种方法,但它们都无效。有什么想法吗?
    $mockInput = Mockery::mock('\Illuminate\Http\Request');
    $mockInput->shouldReceive('file')->andReturn($my_test_data);
    Input::swap($mockInput);

并且。
    Input::shouldReceive('file')->andReturn($my_test_data);
1个回答

4

显然,我错了。这个确实有效。将其放在正确的测试中会有所帮助。

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

同时,我创建了一个 UploadedFile 对象并返回它:

$media = new \Symfony\Component\HttpFoundation\File\UploadedFile(
     $path,
     'orig_name_1.jpg'
);
$my_test_data = [0 => $media];

4
还能用吗?Laravel文档现在说:“注意:不应该模拟Request门面。相反,在运行测试时,将所需的输入传递到调用方法中即可。” - Vladislav Rastrusny
那个特定的评论已经存在了一段时间。一般来说,你不应该嘲笑请求门面。然而,我找不到测试文件上传过程的方法。 - Eric Cope
仍在使用L4。交换对我不起作用。然而,有效的方法是模拟“all”方法,但模拟“get”则不行。 - Namek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接