我要测试文件上传操作。
我检查了该操作的文件类型验证。它通过浏览器交互起作用,但是我尝试使用phpunit验证失败。
我确认仅接受jpg或jpeg文件。
这是我的单位代码
public function testWIthJpgImage()
{
$_FILES = [
'front_image' => [
'name' => 'uitest',
'type' => 'image/jpeg',
'size'=> filesize(storage_path('data/uitest.jpg')),
'error' => 0,
'tmp_name' => storage_path('data/uitest.jpg')
]
];
$response = $this->call('POST', '/api/test',[],[],$_FILES);
$data = json_decode($response->getContent());
dd($data); // here validation fail always
$this->assertEquals(200, $response->getStatusCode());
}
如何在phpunit上正确测试文件上传?我的laravel 5.0版(旧版本)Laravel UploadFile不可用
答案 0 :(得分:1)
您可以为此使用Illuminate\Http\UploadedFile
Facade。
这里是我上传和存储文件的其中一个项目的示例。它还具有文件表和模型。
/** @test */
function create_new_file ()
{
$payload = [
'file' => UploadedFile::fake()->image('avatar.jpg')
];
// act
$response = $this->post("/api/files", $payload);
// test
$response->assertStatus(201);
Storage::disk('local')->assertExists(File::first()->path);
}
别忘了
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
此外,您可以使用
Storage::fake('local');
,以不保留上载的文件(如果您像我一样使用存储)。这非常方便,因此您的测试不会在您的上载文件夹中创建一堆文件。
答案 1 :(得分:0)
我认为我的问题已解决,但是这样做很奇怪:)我同时设置了<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize">
和Symfony UploadedFile:<< / p>
$_FILES