无法在Laravel 7中找到工厂

时间:2020-07-11 15:13:19

标签: laravel phpunit

我正在对PHPunit进行单元测试。代码是:

<?php

namespace Tests\Unit;

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

class ThreadTest extends TestCase
{
    use DatabaseMigrations;



    public function test_a_thread_has_replies()
    {

        $thread = factory('App\Thread')->create();

        $this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $thread->replies);
    }
}

当我运行PHPUnit时出现错误:

InvalidArgumentException:无法找到[App \ Thread]的工厂。

我有一个线程工厂:

<?php

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

use App\Thread;
use Faker\Generator as Faker;

$factory->define(Thread::class, function (Faker $faker) {
    return [
        'user_id' => factory(App\User::class),
        'title' => $faker->sentence,
        'body' => $faker->paragraph
    ];
});

如果我在Tinker使用工厂,那就可以了。

对于其他类,我也有类似的测试函数和工厂,并且它们工作正常。

我很可能犯了一个非常愚蠢的错误,但我找不到它。

有什么建议吗?

亲切的问候,

休伯特

1 个答案:

答案 0 :(得分:3)

您正在扩展php单元测试用例类。这不会加载您的Laravel应用程序。您应该扩展Laravel提供的Tests \ TestCase的使用。

在CLI上使用php artisan make:test UserTest将创建具有正确模板的测试,以测试Laravel应用程序。