Im trying to test an upload API but it fails every time:
我试图测试上传API,但每次都失败:
Test Code :
测试代码:
$JSONResponse = $this->call('POST', '/upload', [], [], [
'photo' => new UploadedFile(base_path('public/uploads/test') . '/34610974.jpg', '34610974.jpg')
]);
$this->assertResponseOk();
$this->seeJsonStructure(['name']);
$response = json_decode($JSONResponse);
$this->assertTrue(file_exists(base_path('public/uploads') . '/' . $response['name']));
file path is /public/uploads/test/34610974.jpg
文件路径是/public/uploads/test/34610974.jpg
Here is My Upload code in a controller :
这是控制器中的My Upload代码:
$this->validate($request, [
'photo' => 'bail|required|image|max:1024'
]);
$name = 'adummyname' . '.' . $request->file('photo')->getClientOriginalExtension();
$request->file('photo')->move('/uploads', $name);
return response()->json(['name' => $name]);
How should I test file upload in Laravel 5.2? How to use call
method to upload a file?
我应该如何在Laravel 5.2中测试文件上传?如何使用call方法上传文件?
3 个解决方案
#1
39
When you create an instance of UploadedFile
set the last parameter $test
to true
.
当您创建UploadedFile的实例时,将最后一个参数$ test设置为true。
$file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true);
^^^^
Here is a quick example of a working test. It expects that you have a stub test.png
file in tests/stubs
folder.
这是一个工作测试的快速示例。它希望你在tests / stubs文件夹中有一个stub test.png文件。
class UploadTest extends TestCase
{
public function test_upload_works()
{
$stub = __DIR__.'/stubs/test.png';
$name = str_random(8).'.png';
$path = sys_get_temp_dir().'/'.$name;
copy($stub, $path);
$file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true);
$response = $this->call('POST', '/upload', [], [], ['photo' => $file], ['Accept' => 'application/json']);
$this->assertResponseOk();
$content = json_decode($response->getContent());
$this->assertObjectHasAttribute('name', $content);
$uploaded = 'uploads'.DIRECTORY_SEPARATOR.$content->name;
$this->assertFileExists(public_path($uploaded));
@unlink($uploaded);
}
}
➔ phpunit tests/UploadTest.php PHPUnit 4.8.24 by Sebastian Bergmann and contributors. . Time: 2.97 seconds, Memory: 14.00Mb OK (1 test, 3 assertions)
#2
9
In Laravel 5.4 you can also use \Illuminate\Http\UploadedFile::fake()
. A simple example below:
在Laravel 5.4中你也可以使用\ Illuminate \ Http \ UploadedFile :: fake()。一个简单的例子如下:
/**
* @test
*/
public function it_should_allow_to_upload_an_image_attachment()
{
$this->post(
action('AttachmentController@store'),
['file' => UploadedFile::fake()->image('file.png', 600, 600)]
);
/** @var \App\Attachment $attachment */
$this->assertNotNull($attachment = Attachment::query()->first());
$this->assertFileExists($attachment->path());
@unlink($attachment->path());
}
If you want to fake a different file type you can use
如果您想伪造不同的文件类型,您可以使用
UploadedFile::fake()->create($name, $kilobytes = 0)
More information directly on Laravel Documentation.
有关Laravel文档的更多信息。
#3
0
You can find this code at this link
您可以在此链接中找到此代码
Setup
建立
/**
* @param $fileName
* @param $stubDirPath
* @param null $mimeType
* @param null $size
*
* @return \Illuminate\Http\UploadedFile
*/
public static function getTestingFile($fileName, $stubDirPath, $mimeType = null, $size = null)
{
$file = $stubDirPath . $fileName;
return new \Illuminate\Http\UploadedFile\UploadedFile($file, $fileName, $mimeType, $size, $error = null, $testMode = true);
}
Usage
用法
$fileName = 'orders.csv';
$filePath = __DIR__ . '/Stubs/';
$file = $this->getTestingFile($fileName, $filePath, 'text/csv', 2100);
Folder Structure:
文件夹结构:
- MyTests
- TestA.php
- Stubs
- orders.csv
#1
39
When you create an instance of UploadedFile
set the last parameter $test
to true
.
当您创建UploadedFile的实例时,将最后一个参数$ test设置为true。
$file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true);
^^^^
Here is a quick example of a working test. It expects that you have a stub test.png
file in tests/stubs
folder.
这是一个工作测试的快速示例。它希望你在tests / stubs文件夹中有一个stub test.png文件。
class UploadTest extends TestCase
{
public function test_upload_works()
{
$stub = __DIR__.'/stubs/test.png';
$name = str_random(8).'.png';
$path = sys_get_temp_dir().'/'.$name;
copy($stub, $path);
$file = new UploadedFile($path, $name, filesize($path), 'image/png', null, true);
$response = $this->call('POST', '/upload', [], [], ['photo' => $file], ['Accept' => 'application/json']);
$this->assertResponseOk();
$content = json_decode($response->getContent());
$this->assertObjectHasAttribute('name', $content);
$uploaded = 'uploads'.DIRECTORY_SEPARATOR.$content->name;
$this->assertFileExists(public_path($uploaded));
@unlink($uploaded);
}
}
➔ phpunit tests/UploadTest.php PHPUnit 4.8.24 by Sebastian Bergmann and contributors. . Time: 2.97 seconds, Memory: 14.00Mb OK (1 test, 3 assertions)
#2
9
In Laravel 5.4 you can also use \Illuminate\Http\UploadedFile::fake()
. A simple example below:
在Laravel 5.4中你也可以使用\ Illuminate \ Http \ UploadedFile :: fake()。一个简单的例子如下:
/**
* @test
*/
public function it_should_allow_to_upload_an_image_attachment()
{
$this->post(
action('AttachmentController@store'),
['file' => UploadedFile::fake()->image('file.png', 600, 600)]
);
/** @var \App\Attachment $attachment */
$this->assertNotNull($attachment = Attachment::query()->first());
$this->assertFileExists($attachment->path());
@unlink($attachment->path());
}
If you want to fake a different file type you can use
如果您想伪造不同的文件类型,您可以使用
UploadedFile::fake()->create($name, $kilobytes = 0)
More information directly on Laravel Documentation.
有关Laravel文档的更多信息。
#3
0
You can find this code at this link
您可以在此链接中找到此代码
Setup
建立
/**
* @param $fileName
* @param $stubDirPath
* @param null $mimeType
* @param null $size
*
* @return \Illuminate\Http\UploadedFile
*/
public static function getTestingFile($fileName, $stubDirPath, $mimeType = null, $size = null)
{
$file = $stubDirPath . $fileName;
return new \Illuminate\Http\UploadedFile\UploadedFile($file, $fileName, $mimeType, $size, $error = null, $testMode = true);
}
Usage
用法
$fileName = 'orders.csv';
$filePath = __DIR__ . '/Stubs/';
$file = $this->getTestingFile($fileName, $filePath, 'text/csv', 2100);
Folder Structure:
文件夹结构:
- MyTests
- TestA.php
- Stubs
- orders.csv