在 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();
- laravel 8 个模型在 'App\Models\'。
- 它改变了工厂的工作方式。参见 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);
}
}
只是玩 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();
- laravel 8 个模型在 'App\Models\'。
- 它改变了工厂的工作方式。参见 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);
}
}