在 PHP 功能测试 Laravel-8 中找不到工厂

factory not being found in PHP Feature Test Laravel-8

只是玩 laravel-8 单元测试。我扩展了基本的 TestCase 并认为 laravels 工厂方法可用。我检查了 composer.json 并且正在加载工厂。

我正在尝试 运行 这个特定的测试,但是 factory 没有找到任何想法:

<?php

namespace Tests\Feature\Http\Controllers\Auth;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\User;

class LoginControllerTest extends TestCase
{
    use RefreshDatabase;
    /** @test */
    public function login_authenticates_and_redirects_user()
    {
        $user = factory(User::class)->create();

        $response = $this->post(route('login'), [
            'email' => $user->email,
            'password' => 'password'
        ]);

        $response->assertRedirect(route('home'));
        $this->assertAuthenticatedAs($user);
    }
}

我得到的错误是:

1) Tests\Feature\Http\Controllers\Auth\LoginControllerTest::login_authenticates_and_redirects_user
Error: Call to undefined function Tests\Feature\Http\Controllers\Auth\factory()

结果是升级到 laravel-8 发行说明:

"Laravel 的模型工厂功能已完全重写以支持 类,并且与 Laravel 7.x 样式工厂不兼容。"

所以为了让它工作,我使用了:

$user = \App\Models\User::factory(User::class)->make();
  1. laravel 8 个模型在 'App\Models\'。
  2. 它改变了工厂的工作方式。参见 docs

所以,它应该是这样的:

<?php

namespace Tests\Feature\Http\Controllers\Auth;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\Models\User;

class LoginControllerTest extends TestCase
{
    use RefreshDatabase;
    /** @test */
    public function login_authenticates_and_redirects_user()
    {
        $user = User::factory->create();

        $response = $this->post(route('login'), [
            'email' => $user->email,
            'password' => 'password'
        ]);

        $response->assertRedirect(route('home'));
        $this->assertAuthenticatedAs($user);
    }
}