>  기사  >  PHP 프레임워크  >  Laravel 단위 테스트 소개: 인증된 사용자 시뮬레이션

Laravel 단위 테스트 소개: 인증된 사용자 시뮬레이션

藏色散人
藏色散人앞으로
2021-04-23 16:13:541598검색

Laravel 단위 테스트: 인증된 사용자 시뮬레이션

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 中的 actingAsbe 方法。

设置以后在后续的测试代码中,我们可以通过 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');
$fillableid 속성을 ​​추가해야 합니다. 그렇지 않으면 예외가 발생합니다. 발생합니다: IlluminateDatabaseEloquentMassAssignmentException: id
🎜다음으로 사용자 인증을 위조합니다 user:🎜rrreee🎜앞으로 단위 테스트의 작은 세부 사항에 대한 기사를 계속 쓸 예정입니다. 주의해 주세요: )🎜 🎜관련 권장사항:🎜최신 5개 Laravel 비디오 튜토리얼🎜🎜🎜

위 내용은 Laravel 단위 테스트 소개: 인증된 사용자 시뮬레이션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제