Laravel에서 단위 테스트를 작성할 때 새 기사 작성, 주문 등. 그렇다면 Laravel 단위 테스트에서 이를 구현하는 방법은 무엇입니까?
공식 솔루션
Laravel 공식 문서의 테스트 장에 언급되어 있습니다:
물론, 세션의 일반적인 용도 중 하나는 인증된 사용자의 상태를 유지하는 것입니다. actingAs 도우미 메서드는 지정된 사용자를 인증하는 간단한 방법을 제공합니다. 예를 들어 사용자를 생성하고 인증하기 위해 모델 팩토리를 사용할 수 있습니다.
<?php use App\User; class ExampleTest extends TestCase { public function testApplication() { $user = factory(User::class)->create(); $response = $this->actingAs($user) ->withSession(['foo' => 'bar']) ->get('/'); } }
사실 Laravel 테스트 IlluminateFoundationTestingConcernsImpersonatesUsers에서 <code>actingAs
를 사용하는 것입니다. code> Trait > 및 be
메소드를 사용합니다. IlluminateFoundationTestingConcernsImpersonatesUsers
Trait 中的 actingAs
和 be
方法。
设置以后在后续的测试代码中,我们可以通过 auth()->user()
等方法来获取当前认证的用户。
伪造认证用户
在官方的示例中有利用 factory 来创建一个真实的用户,但是更多的时候,我们只想用一个伪造的用户来作为认证用户即可,而不是通过 factory 来创建一个真实的用户。
在 tests 目录下新建一个 User
calss:
use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { protected $fillable = [ 'id', 'name', 'email', 'password', ]; }
必须在 $fillable
中添加 id
attribute . 否则会抛出异常: IlluminateDatabaseEloquentMassAssignmentException: id
auth()->user()
등의 메소드를 통해 현재 인증된 사용자를 얻을 수 있습니다. 가짜 인증 사용자공식 예제에서는 팩토리를 사용하여 실제 사용자를 생성하지만 더 자주 팩토리 실제 사용자를 통해 생성하는 대신 가짜 사용자를 인증 사용자로 사용하고 싶습니다. 테스트 디렉터리에 새User
calss를 만듭니다.$user = new User([ 'id' => 1, 'name' => 'ibrand' ]); $this->be($user,'api');
$fillable
에 id
속성을 추가해야 합니다. 그렇지 않으면 예외가 발생합니다. 발생합니다: IlluminateDatabaseEloquentMassAssignmentException: id