Я пытаюсь проверить использование php-модуля в laravel для загрузки файла в s3 Bucket.Я использую faker
для создания изображения.
Тест запускается и вызывает контроллер, но проблема в том, что когда он достигает уровня контроллера, он просто не может найти файл для получения изображения.Я думал, что имя 'profilePicture' является проблемой, но я так не думаю.
Мой тестовый код phpunit выглядит следующим образом
public function testSuccesfulPictureUpload()
{
/** @var User $admin */
$admin = factory(User::class)->state('verified')->create();
$response = $this->actingAs($admin, 'admin')
->postJson(route('internal.admin.image',[
'profilePicture' => new UploadedFile($this->faker->image($dir = '/tmp', $width = 640, $height = 480),'random.jpg',null,null,null,null)
]));
$response->assertStatus(Response::HTTP_OK);
}
И мой контроллер выглядит следующим образом.
public function storeImage(Request $request){
if($request->hasFile('profilePicture')) {
//get filename with extension
$filenamewithextension = $request->file('profilePicture')->getClientOriginalName();
//get filename without extension
$filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
//get file extension
$extension = $request->file('profilePicture')->getClientOriginalExtension();
//filename to store
$filenametostore = $filename.'_'.time().'.'.$extension;
//Add bucket name
config(['disks.s3.bucket' => 'my-s3-bucket']);
//Upload File to s3
Storage::disk('s3')->put($filenametostore, fopen($request->file('profilePicture'), 'r+'), 'public');
//Store $filenametostore in the database
}
return response()->json(['message' => 'Error, could not find file'], 404);
}
Я никогда не смогу дойти до конца, поскольку вызов всегда заканчивается на if($request->hasFile)
Так что я не уверен, почему он не может найти файл с помощью модульного тестирования php.Я просматривал приведенный ниже стек поверх потоковой страницы Как проверить загрузку файлов с помощью laravel и phpunit?
Но это все равно не помогло мне.