我正在尝试为接收文件的 POST 回调编写测试。
Controller 使用此功能将图像移动到所需位置:
$request->file('image')->move(env('IMG_DIR'), $filename);
env('IMG_DIR') 在测试和本地环境中有所不同,但效果非常好。
我的测试如下:
$file = new UploadedFile(base_path() . 'tests/file/test_img.png', 'test.png', 'png', null, null, true);
$this->call('POST', '/endpoint', null, ['user-jwt' => env('CU_JWT')], ['image' => $file])
上传效果很好,图像移动正确,测试成功。
问题是,每次我运行测试时,用于测试的图像 (tests/file/test_img.png
) 都会被移走并从目录中消失。
有没有办法告诉 PHPUnit/Laravel 上传只能是伪造的,而不是真正移动原始图像?
最佳答案
在您的开发环境中,制作图像的副本:
$originalImagePath = base_path() . 'tests/file/test_img.png';
$copyImagePath = base_path() . 'tests/file/test_img_copy.png';
File::copy($originalImagePath, $copyImagePath)
然后仅使用复制的图像
$file = new UploadedFile($copyImagePath, 'test.png', 'png', null, null, true); // etc.
这样,复制的图像就会离开您的图像目录,然后您运行测试,一切都会以与开始时相同的方式结束。
关于php - 测试 Laravel 5.2 时不要移动原始文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39533828/