在处理生成文件名的文件上传时,您如何知道文件名是什么,然后在测试中测试它是否存在。

首先在控制器中通过存储调用执行文件上传,该调用会将文件存储到公共磁盘中的文件夹中,如果您不需要指定桌面,则不要使用第二个参数。

$path = $request->file('name')->store(
    'files',
    'public'
);

//when no disk is required

$path = $request->file('name')->store('files');

现在这个方法将返回$path作为它的返回值。

然后在测试中使用 storage fake 告诉 Laravel 伪造文件上传

Storage::fake('files');

要伪造上传,您可以使用:

UploadedFile::fake()->image('avatar.jpg')

 要断言文件存在,您可以检查存储中的文件:

Storage::assertExists('files/avator.jpg');

但是如果文件是动态存储的,您将不知道文件名,在这种情况下,您需要查看测试的响应。响应不是JSON而是测试响应。为了将其转换为 json,请在响应上使用 decodeResponseJson。然后你就可以正常使用json了。

把它们放在一起:

test('can upload file', function () {

    Storage::fake('files');

    $response = post('api/v1/file', [
        'name' => UploadedFile::fake()->image('avatar.jpg'),
    ])
        ->assertStatus(201)
        ->assertSessionHasNoErrors();

    $path = $response->decodeResponseJson()['data']['path'];

    Storage::assertExists($path);
});

 

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。