Проверка загрузки файла Lumen: файл отсутствует по запросу - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь проверить загрузку файлов в 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);

    ...
}

Conroller:

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.

P.S. Я использую Amazon S3 для хранения файлов.

1 Ответ

0 голосов
/ 20 марта 2019

В Lumen параметры файлов жестко запрограммированы на пустые. См. Выпуск Github .

Это происходит потому, что параметр files передан в вызов метод в вызове post жестко закодирован как пустой массив.

Вам необходимо структурировать вызов следующим образом:

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