【问题标题】:How to do Unit Testing + code-coverage with file upload in Laravel 5.2如何在 Laravel 5.2 中通过文件上传进行单元测试 + 代码覆盖
【发布时间】:2016-07-20 23:13:56
【问题描述】:

我想在 Laravel 5.2 上对文件上传进行一些单元测试。

这是我的做法,请参考answer

/** app/Http/routes.php **/
Route::post('upload', function() {
    $fileExists = false;

    if ($_FILES['images']) {
        $fileExists = true;
    }

    return ['result' => $fileExists];
});

/** tests/ExampleTest.php **/
public function testUploadFile()
{
    $file = new \Symfony\Component\HttpFoundation\File\UploadedFile(
        base_path() . '/tests/files/profile.png', 'profile.png');

        $response = $this->call('POST', 'upload', 
            [
               'firstname' => 'firstname', 
               'lastname'  => 'lastname', 
               'promotion' => '2016', 
               'isCoop' => 1
            ], 
            [
               'images' => [$file]
            ]
        );
}

phpunit 的结果是:

但是,当我检查代码覆盖率结果时,routes.php 文件中的 if 语句中的那一行没有被执行,如下所示。

上传的文件好像没有插入$_FILES变量,所以检测为空。

知道如何解决它..?谢谢。

注意:我使用Larave创建API服务,所以我没有使用表单上传文件

【问题讨论】:

标签: phpunit code-coverage laravel-5.2


【解决方案1】:

在 laravel 5.2.15 之后发生这种情况是因为您正在使用

Symfony\Component\HttpFoundation\File\UploadedFile

而不是

Illuminate\Http\UploadedFile

而且文件永远不会发送到控制器。

【讨论】:

    【解决方案2】:

    我认为你应该写:

    [
        'images' => $file
    ]
    

    代替

    [
        'images' => [$file]
    ]
    

    另外,你应该在 5.2.15 之后使用 Illuminate\Http\UploadedFile 而不是 Symfony\Component\HttpFoundation\File\UploadedFile 参见Laravel 5.2 Mocked file upload unit test fails

    【讨论】:

      猜你喜欢
      • 2016-05-04
      • 2018-03-06
      • 2016-07-24
      • 2021-09-10
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多