【问题标题】:Mocking Input Facade in Laravel 4在 Laravel 4 中模拟输入外观
【发布时间】:2014-02-17 15:01:26
【问题描述】:

我正在使用这是一个表单服务。

$files = Input::file('my_file');

我正在尝试对其进行测试,但我似乎无法正确模拟 Input。文档说不要模拟 Request 门面。没有提到 Input 门面,尽管它们都指向 IOC 容器中的同一个类。

我尝试了几种方法,但都不起作用。有什么想法吗?

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

    Input::shouldReceive('file')->andReturn($my_test_data);

【问题讨论】:

    标签: php unit-testing laravel-4


    【解决方案1】:

    显然,我错了。这确实有效。它确实有助于在正确的测试中使用它。

    $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];
    

    【讨论】:

    • 它还能用吗? Laravel 文档现在说 Note: You should not mock the Request facade. Instead, pass the input you desire into the call method when running your test.
    • 那个特定的评论已经存在了很长时间。一般来说,你不应该嘲笑 Request 门面。但是,我找不到测试文件上传过程的方法。
    • 仍在使用 L4。交换对我不起作用。但是,有效的是模拟 all 方法,但模拟 get 不会。
    猜你喜欢
    • 2015-07-09
    • 2019-01-11
    • 2017-07-01
    • 1970-01-01
    • 2013-09-26
    • 2013-01-20
    • 2013-12-17
    • 2013-06-22
    相关资源
    最近更新 更多