流明文件上传测试:请求中不存在文件

问题描述 投票:0回答:1

我正在尝试在Lumen 5.6中测试文件上传,但Illuminate\Http\UploadedFile fake不会在我的控制器中通过检查。例如:

测试:

use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;

public function testUploadImage()
{
    Storage::fake('s3');

    $this->actingAs($this->user)
        ->post('/v1/files', [
            'file1' => UploadedFile::fake()->image('avatar.jpg'),
        ])
        ->seeJsonStructure([
            'file1' => [
                'filename',
                'mime',
            ],
        ])
        ->assertResponseStatus(201);

    ...
}

控制器:

public function upload(Request $request)
{
    $this->validate($request, [
        'file1' => 'required|file|mimetypes:image/jpeg',
    ]);

    // Temp check
    if (!$request->hasFile('file1')) {
        echo 'no file';
    }

    $filename = $request->file('file1')->hashName();
    $mime = $request->file('file1')->getMimeType();

    Storage::disk('s3')
        ->putFile(
            $this->getFolderByMime($mime),
            $request->file('file1'),
            'public'
        );

    return $this->respond([
        'file1' => [
            'filename' => $filename,
            'mime' => $mime,
        ]
    ]);
}

验证通过,但$request->hasFile('file1')总是返回false

附:我使用Amazon S3来存储文件。

laravel unit-testing phpunit lumen
1个回答
0
投票

在Lumen中,files参数被硬编码为空。 See Github issue

发生这种情况是因为传递给post调用中的call方法的files参数被硬编码为空数组。

您需要按如下方式构建调用:

$this->actingAs($this->user)
    ->post('/v1/files', [], [], [
        'file1' => UploadedFile::fake()->image('avatar.jpg'),
    ])
    ->seeJsonStructure([
        'file1' => [
            'filename',
            'mime',
        ],
    ])
    ->assertResponseStatus(201);
© www.soinside.com 2019 - 2024. All rights reserved.