huf*_*404 6 testing laravel laravel-9
我刚刚将我的应用程序从 Laravel v8 升级到 v9。现在我遇到以下代码抛出此错误的问题:
League\Flysystem\UnableToRetrieveMetadata :无法检索位置为 test_file.xlsx 的文件的 file_size。
我的控制器:
<?php
namespace App\Http\Controllers\Reports;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
class ReportDownloadController extends Controller
{
/**
* Handle the incoming request.
*
* @param string $path
* @return \Symfony\Component\HttpFoundation\StreamedResponse
*/
public function __invoke(string $path): \Symfony\Component\HttpFoundation\StreamedResponse
{
return Storage::disk('temp')->download($path, request()->query('filename'));
}
}
Run Code Online (Sandbox Code Playgroud)
相关测试:
/** @test */
public function it_returns_a_file_download_with_the_provided_filename_presented_to_the_user()
{
$this->withoutExceptionHandling();
Storage::fake('temp');
$fakeFile = UploadedFile::fake()->create('test_file.xlsx');
Storage::disk('temp')->put('test_file.xlsx', $fakeFile);
$response = $this->actingAs($this->user)
->getJson(route('reports.download', ['path' => 'test_file.xlsx', 'filename' => 'Appropriate.xlsx']));
$response->assertDownload('Appropriate.xlsx');
}
Run Code Online (Sandbox Code Playgroud)
我知道 Flysystem 已更新到 v3,但我似乎不知道如何解决此问题。
我什至创建了一个空的 Laravel 9 应用程序来使用以下代码进行测试,但仍然遇到相同的错误,所以我认为这不是我的应用程序。
public function test_that_file_size_can_be_retrieved()
{
Storage::fake('local');
$fakeFile = UploadedFile::fake()->create('test_file.xlsx', 10);
Storage::disk('local')->put('test_file.xlsx', $fakeFile);
$this->assertEquals(10, (Storage::disk('local')->size('test_file.xlsx') / 1024));
}
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
小智 7
从 Laravel 8 切换到 Laravel 9 时,我遇到了同样的问题。
实际上抛出了Unable toretrieve the file_size错误,因为它根本无法在提供的路径中找到该文件。
就我而言,事实证明,提供给下载功能的路径以 a 开头/,这不会导致Flysystem 2出现问题,但显然会导致Flysystem 3出现问题。
鉴于您所展示的测试,它看起来并不是这里的问题,但也许这无论如何都会有所帮助。