اذهب إلى المحتوى
  • 0

فشل اختبار رفع الملفات في لارافل

Amir Alsaeed

السؤال

أحاول إنشاء اختبار test لرفع الملفات في مشروع لارافل، ولكنه يفشل في كل مرة.

كود الاختبار:

$JSONResponse = $this->call('POST', '/upload', [], [], [
    'photo' => new UploadedFile(base_path('public/uploads/') . '/img1.jpg', 'img1.jpg')
]);

$this->assertResponseOk();
$this->seeJsonStructure(['name']);

$response = json_decode($JSONResponse);
$this->assertTrue(file_exists(base_path('public/uploads') . '/' . $response['name']));

والمتحكّم المسؤول عن رفع الملف:

$name = 'anyname' . '.' . $request->file('photo')->getClientOriginalExtension();

$request->file('photo')->move('/uploads', $name);

return response()->json(['name' => $name]);

علماً بأنه سيتم حفظ الملفات ضمن المسار التالي: /public/uploads/

أين الخطأ؟ وماهي الطريقة الصحيحة لاختبار رفع الملفات في لارافل؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

عند إنشائك نُسخة من الصنف UploadedFile قم بتمرير القيمة true لآخر وسيط بهذا الشكل و هذا الوسيط هو وسيط بولياني يأخذ true إن كانت البيئة هي بيئة إختبارية و القيمة الإفتراضية له هي false.

$file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true);
                                                                           ^^^^

و هذا مثال يوضح الآلية بإعتبار وجود ملف صورة بالإسم test.png بداخل مجلد tests/stubs:

<?php
class UploadTest extends TestCase
{
  public function test_upload_works()
  {
    $stub = __DIR__.'/stubs/test.png';
    $name = str_random(8).'.png';
    $path = sys_get_temp_dir().'/'.$name;

    copy($stub, $path);

    $file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true);
    $response = $this->call('POST', '/upload', [], [], ['photo' => $file], ['Accept' => 'application/json']);

    $this->assertResponseOk();
    $content = json_decode($response->getContent());
    $this->assertObjectHasAttribute('name', $content);

    $uploaded = 'uploads'.DIRECTORY_SEPARATOR.$content->name;
    $this->assertFileExists(public_path($uploaded));

    @unlink($uploaded);
  }
}

بإمكانك أيضاً النظر إلى التابع fake فهو يُساعد كثيراً في عملية إختبار رفع الملفات مثال:

<?php
class UploadTest extends TestCase
{
  public function test_upload_works()
  {
    $this->post(
        action('AttachmentController@store'),
        ['file' => UploadedFile::fake()->image('file.png', 600, 600)]
    );

    /** @var \App\Attachment $attachment */
    $this->assertNotNull($attachment = Attachment::query()->first());
    $this->assertFileExists($attachment->path());
    @unlink($attachment->path());
  }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...