私はルーメン付きのファイルアップロードJSON APIを構築し、phpunit APIテストを作成しようとしています。ルーメン5.5 JSON API File UploadのテストはUploadedFileで中断します
私はそれがあるので、すぐに私は 、["file" => new UploadedFile(TestUtils::tempPath('test.jpg'), 'test.jpg', "image\jpeg", 100, null, true)]
と$this->json('POST', '/chunk', $data);
経由で送信するように構成実像でファイルのアップロードをシミュレートしようとして、私はアップロードされたファイルで何もできないということですが、持っています問題配列と私はエラーを取得Call to a member function move() on array in ...
奇妙なことに私はUploadedFile::fake()->image('test.jpg')
を使用する場合、それは私の要求をmanglesと私はそれを送信する他のデータは、コントローラで利用できません。
コントローラのファイルオブジェクトをdddすると、 "array(0){}"が表示されます。私はそれがUploadedFileObjectを使用している単体テストが正常に実行されるので、json( 'POST')経由の転送と関係があると考えています。
私は要求全体をddをした場合、それは示しています
["request"]=>
object(Symfony\Component\HttpFoundation\ParameterBag)#52 (1) {
["parameters":protected]=>
array(5) {
["chunkType"]=>
string(4) "flow"
["flowIdentifier"]=>
string(13) "Testing123Bnu"
["flowChunkNumber"]=>
int(1)
["flowTotalChunks"]=>
int(2)
["file"]=>
array(0) {
}
}
}
...
["files"]=>
object(Symfony\Component\HttpFoundation\FileBag)#71 (1) {
["parameters":protected]=>
array(0) {
}
}
...
["content":protected]=> string(103) "{(otherData..), "file":{}}"
は、私はこれを回避するか、またはこのような状況では、ファイルのアップロードをテストする方法が分からないし、時間を探してきました。 UploadedFileコンストラクタのsymfonyテストモードは効果がありません。ここで
は私のテストで:
public function testChunkUpload_FlowChunk()
{
$data = [ (otherData)
"file" => new UploadedFile(TestUtils::tempPath('test.jpg'), 'test.jpg', "image\jpeg", 100, null, true)
//UploadedFile::fake()->image('test.jpg')
];
$this->assertFileExists(TestUtils::tempPath('test.jpg'));
$this->json('POST', '/chunk', $data);
$this->assertEquals(200, $this->response->status());
$this->assertEquals('application/json', $this->response->headers->get('Content-Type'));
}
そして、ここでは私のコントローラの関連するメソッドです:
public function receiveChunk(Request $request){
if (! $request->has('chunkType')) {
return response()->json(["Invalid Chunk Type"], 400);
}
$data = $this->chunkNormalizer->normalizeInput($request->all());
$chunk = $this->chunkFactory->createChunk( (otherData)
$data['fileHandle']);
$this->fileAssembler->processChunk($chunk);
return response()->json(["Success"], 200);
}
、エラーがprocessChunkで発生します。
public function processChunk(FileChunk $chunk){
...
$chunkName = "..." . ".chunk";
$fileHandle = $chunk->getFileHandle();
$fileHandle->move($this->assemblePath, $chunkName);
}
任意のアイデアでしょう大変感謝しています!