Factory can't be seen in unit test.

Factory can't be seen in unit test.

This is how my ModelFactory.php looks:

<?php

/** @var \Illuminate\Database\Eloquent\Factory $factory */

use App\User;
use Faker\Generator as Faker;
use Illuminate\Support\Str;

$factory->define(User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => 'yIXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
});

$factory->define(\App\Course::class, function (Faker $faker) {
    return [
        'user_id' => function () {
            return (factory(User::class)->create())->id;
        },
        'name' => $faker->sentence,
        'short_description' => $faker->sentence(20),
        'description' => $faker->paragraph(10),
        'seats' => random_int(0, 10),
        'expiry_date' => $faker->dateTimeBetween('+0 days', '+3 months'),
    ];
});

And this is how my unit test looks:

<?php

namespace Tests\Unit;

use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\TestCase;

class CourseTest extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function a_course_belongs_to_a_teacher() {
        $course = factory(\App\Course::class, 1)->create();

        //$this->assertInstanceOf(\App\Course::class, $course->teacher);
    }
}

This is the error I receive InvalidArgumentException: Unable to locate factory with name [default] [App\Course].

I can't understand why, any help is appreciated.

Nakov
Level 50
Nakov3 months ago
 

@catalinul Ah, I see I believe you have the wrong import for the parent class.

Use this

use Tests\TestCase;

instead of

use PHPUnit\Framework\TestCase;

as the first one is where Laravel does all it's startup.

posted on 2020-04-13 20:45  刘应杰  阅读(122)  评论(0编辑  收藏  举报

导航