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

السؤال

نشر

أحاول إختبار خاصية رفع فيديو عن طريق Laravel Livewire بالرغم من أن خاصية الرفع تعمل إلا أن الإختبار يفشل و لا أدر أين المُشكلة، 

هذا إختبار الخاصية:

public function can_upload_video()
{
  $sizeInKilobytes = 100000;

  $file = UploadedFile::fake()->create(
    'video.mp4', $sizeInKilobytes, 'mp4'
  );

  Storage::fake('videos_disk');

  $this->actingAs(User::factory()->create());

  Livewire::test(Create::class)
    ->set('title', 'foo')
    ->set('video', $file)
    ->call('upload');

  dd(Storage::disk('videos_disk')->allFiles());
}

و هذا مُكون livewire:

class Create extends Component
{
  use WithFileUploads;
  use DispatchesJobs;

  public $video;
  public $title,

  public function upload()
  {
    $this->validate([
      'title' => 'required',
      'video' => 'max:1000000|required|file|mimetypes:video/mp4,video/mpeg,video/x-matroska',
    ]);

    $video = Video::create([
      'disk'          => 'videos_disk',
      'original_name' => $this->video->getClientOriginalName(),
      'path'          => $this->video->store('/', 'videos_disk'),
      'streaming_path'=> null,
      'title'         => $this->title,
    ]);

    $this->dispatch(new ConvertVideoForStreaming($video));
  }
}

الخاصية تعمل لكن عند تنفيذ الإختبار يُعطي مصفوفة فارغة. المُتوقع أن يعطيني مصفوفة بها الملف المرفوع.

Recommended Posts

  • 1
نشر

هذا غالباً يحدث بسبب فشل ال validation حيث أنك تتحقق من mime type لكن في الإختبار الملف الوهمي لا يحتوي على نفس mime type هنا:

<?php

$file = UploadedFile::fake()->create(
  'video.mp4', $sizeInKilobytes, 'mp4'
);

لذلك حاول تغيير هذه الأسطر:

<?php

$file = UploadedFile::fake()->create(
  'video.mp4', $sizeInKilobytes, 'mp4'
);

إلى mime type صحيح بهذا الشكل:

<?php

$file = UploadedFile::fake()->create(
  'video.mp4', $sizeInKilobytes, 'video/mp4'
);
  • 0
نشر

يمكنك تغيير الكود التالي 

$file = UploadedFile::fake()->create(
    'video.mp4', $sizeInKilobytes, 'mp4'
  );

إلى 

$file = UploadedFile::fake()->create(
    'video.mp4', $sizeInKilobytes, 'video/mp4'
  );

بحيث تم تغيير mime إلى mime صحيح.

إيضا حاول استخدام ملف وسائط حقيقي بدلاً من ملف وسائط مزيف.

$path = <path to your file>;
$file = new UploadedFile($path, $name, filesize($path), 'video/mp4', null, true);

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...