通过测试用例上传文件时删除原始文件的测试用例

时间:2017-04-05 06:10:21

标签: laravel testing file-upload laravel-5 phpunit

这是我的测试用例

public function testSelfieFileUpload()
{
    $path = public_path().'/uploads/sample1.jpg';
    $name = 'sample1.jpg';
    $file = new UploadedFile($path, $name, 'image/png', filesize($path), null, true);
    $response = $this->post($this->endpoint, ['file' => $file], $this->setHeaders());
    $response->assertStatus(200)
        ->assertJsonFragment(array("status" => "success"));
}

但问题是它正在从文件夹中删除原始文件,即sample1.jpg

帮帮我。我错过了什么吗?虽然测试用例运行良好。

2 个答案:

答案 0 :(得分:0)

当遇到同样的问题时,在查看源代码后,我找不到修复它的标志。

在解决方法时,我在运行测试时创建了一个副本,该副本会被删除,但不再是问题。

$temporaryFilePath = $this->createTempFile($this->testFilePath);
$file = new \Illuminate\Http\UploadedFile($path, $name, $mime, filesize($path), null, true);
//do your test logic

...

private function createTempFile($path) {

    $tempFilePath = $this->basePath . 'temp.xlsx';
    copy($path, $tempFilePath);

    return $tempFilePath;
}

您可能希望根据需要对其进行优化。

答案 1 :(得分:0)

这对我有用。
您必须在 public_pathstorage_path 中存储相同的文件:

 $filename = storage_path('app/pdfstest/COVID 19.pdf');

 $pdf = new UploadedFile($filename, $name, 'application/pdf');

 $response = $this->post('/gallery', [
   'user_id' => $this->user->id,
   'doc' => [$pdf],
   'from_tab' => 'test'
 ]);

 $temp_pdf = file_get_contents(public_path('pdfstest/COVID 19.pdf'));
 Storage::put('pdfstest/COVID 19.pdf', $temp_pdf);