我的 PHPUnit 集成测试有点问题,我有一种方法可以处理视频文件的表单上传以及该视频的预览图像。
public function store($request)
{
/** @var Video $resource */
$resource = new $this->model;
// Create a new Content before creating the related Photo
$contentRepo = new ContentRepository();
$content = $contentRepo->store($request);
if($content->isValid()) {
$resource->content_id = $content->id;
$directory = 'frontend/videos/assets/'.date("Y").'/'.date('m').'/'.time();
\File::makeDirectory($directory, 0755, true);
$request->video->move($directory.'/', $request->video->getClientOriginalName());
$resource->video = '/'.$directory.'/'.$request->video->getClientOriginalName();
$request->preview_image->move($directory.'/', $request->preview_image->getClientOriginalName());
$resource->preview_image = '/'.$directory.'/'.$request->preview_image->getClientOriginalName();
$resource->highlighted = intval($request->input('highlighted') == 'on');
$resource->save();
return $resource;
}
else {
return $content;
}
}
要保留的重要部分是$request->video->move()
我可能需要替换以使用虚拟文件系统的调用。
然后是测试
public function testVideoUpload(){
File::put(__DIR__.'/frontend/videos/assets/image.mp4', 'test');
$file = new UploadedFile(__DIR__.'/frontend/videos/assets/image.mp4', 'foofile.mp4', 'video/mp4', 100023, null, $test=true);
File::put(__DIR__.'/frontend/images/assets/image.jpg', 'test');
$preview = new UploadedFile(__DIR__.'/frontend/images/assets/image.jpg', 'foofile.jpg', 'image/jpeg', 100023, null, $test=true);
$this->post('/admin/videos', [
'title' => 'My Video #12',
'description' => 'This is a description',
'actors' => [$this->actor->id, $this->actor2->id],
'scenes' => [$this->scene->id, $this->scene2->id],
'payment_methods' => [$this->paymentMethod->id],
'video' => $file,
'preview_image' => $preview
])->seeInDatabase('contents', [
'title' => 'My Video #12',
'description' => 'This is a description'
]);
}
如您所见,我需要在某个本地目录中创建一个虚拟文件,然后在对表单端点的 HTTP 请求中使用它,然后,该文件将被移动,我需要删除创建的文件夹和新移动的文件夹文件......这是一个真正的混乱。
因此,我想改用虚拟文件系统,但我不知道如何在这种特殊情况下进行设置,我已经下载了一个包并进行了设置,但问题是,首先,你使用了哪个包/推荐,您将如何调整课程和测试以支持虚拟文件系统?我需要切换到使用 Storage 门面而不是$request->video->move()
调用吗?如果是这样,那将如何完成?
预先感谢您的帮助