I want to seed database when I use this
public function run()
{
$users = factory(app\User::class, 3)->create();
}
Add three user in database but when I use this
public function run()
{
$Comment= factory(app\Comment::class, 3)->create();
}
Show me error
[InvalidArgumentException]
Unable to locate factory with name [default] [app\Comment].
use PHPUnit\Framework\TestCase;
[WRONG: and throws this error]
use Tests\TestCase;
[CORRECT]
If nothing helps with PHPUnit.
For those of readers who stuck with the same issue in tests, I found out that I forgot to add parent::setUp()
in setUp
method.
By default the laravel installation comes with this code in the database/factories/ModelFactory.php
File.
$factory->define(App\User::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => bcrypt(str_random(10)),
'remember_token' => str_random(10),
];
});
So you need to define a factory Model before you use it to seed database. This just uses an instance of Faker Library which is used to generate fake Data for seeding the database to perform testing.
Make sure You have added a similar Modal Factory for the Comments Model.
So your Comments Model Factory will be something like this :
$factory->define(App\Comment::class, function (Faker\Generator $faker) {
return [
'comment' => $faker->sentence,
// Any other Fields in your Comments Model
];
});
This can also happen when you are running the command factory()->create()
from php artisan tinker
. Make sure you save the file database/factories/ModelFactory.php
before opening tinker
I'm using laravel 5.5 and for that doing this is bit different. You have to create CommentFactory.php inside \database\factories directory and add this inside,
$factory->define(App\Comment::class, function (Faker\Generator $faker) {
return [
'comment' => $faker->sentence,
// Any other Fields in your Comments Model
];
});
And add this,
$Comment= factory(\App\Comment::class, 3)->create();
instead of
$Comment= factory(app\Comment::class, 3)->create();
I just wanted to add this since I'm facing the same issue for later version and this thread helped me a lot to fix it.
Step - Make sure CommentFactory is using Comment instead of Model.
use App\Comment ...
$factory->define(Comment::class, function (Faker $faker){
Step - Verify that the names are correct in CommentsTableSeeder.
use App\Comment ...
public function run() { factory(Comment::class, 3)->create(); }
Good luck!
if you had this issue while using a unit test, this may solve your problem. Extends your class with
Tests\TestCase
instead of
PHPUnit\Framework\TestCase
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With