Here is how you can test the image or file uploads in your PHPUnit feature test in Laravel.
Let’ say you have a Post Model in your application which also has an image parameter.
Here is how the PostFactory
looks like
/* @var $factory \Illuminate\Database\Eloquent\Factory */
use App\Post;
use Faker\Generator as Faker;
$factory->define(Post::class, function (Faker $faker) {
$image =
return [
'title' => $faker->sentence,
'content' => $faker->paragraph,
'image' => $faker->image('public/storage/images',640,480, null, false),
];
});
Here is how the validation rules looks like
$rules = [
'title' => 'required',
'content' => 'required',
'image' => 'required|image|mimetypes:image/jpeg,image/png,image/jpg'
];
If you use the factory method in your phpunit test, The test will fail with error The given data was invalid.
, since we are only passing the image name and not the actual image for validaiton.
Here is how you can use \Illuminate\Http\UploadedFile::fake()
in your tests.
/** @test */public function admin_user_can_add_new_post(){
// Given that we have a signed in user
$this->actingAs($this->user);
$tag = factory('App\Post')->make(['image' => UploadedFile::fake()->create('test.png', $kilobytes = 0)]);
$this->post('/admin/tags', $tag->toArray());
$this->assertDatabaseHas('tags', ['name' => $tag->name]);
}
That’s all about using UploadedFile to test file uploads in Laravel.