我对PHPUnit集成测试有点问题,我有一个方法可以处理视频文件的表单上传以及该视频的预览图像。Laravel 5.4 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请求到窗体的终点,那么在此之后,该文件将被移动,我需要删除创建的文件夹和新移动的文件...这是一个真正的混乱。因为我想使用虚拟文件系统,但我不知道如何设置它在这种特殊情况下,我已经下载了一个包并设置它,但问题是,首先,哪些包你有没有使用/推荐,以及如何调整课程和测试以支持虚拟文件系统?我需要切换到使用存储门面而不是$request->video->move()
呼叫吗?如果是的话,那究竟会如何呢?
预先感谢您的帮助