Laravelユニットテスト

2909 ワード

ユニットテスト


デフォルトでは、testsディレクトリには2つのサブディレクトリが含まれています.FeatureとUnitは、それぞれ機能テストとユニットテストに使用されます.ユニットテストは、小さな、相互に隔離されたコードに焦点を当てています.実際には、ほとんどのユニットテストは単一の方法に焦点を当てている可能性があります.機能テストは、いくつかのコンポーネントの前のインタラクション、さらには完全なHTTP要求を含む、より大きなブロックのコードをテストするために使用することができる.

新しいテストを作成

//Feature
php artisan make:test UserTest
//Unit
php artisan make:test UserTest --unit

テストの実行

phpunit
.vendor/bin/phpunit
.vendor/bin/phpunit --filter=ExampleTest

setupメソッド


setUpメソッドは、テストが開始される前に実行されます.私たちの構造関数に似ています.
public function setUp(): void
    {
        parent::setUp(); // TODO: Change the autogenerated stub
        $this->tenantUser = User::query()->find(2);
        $this->schoolUser = User::query()->find(3);
    }

このうち、ActingJWTUserというtraitを使用しました.このtraitの主な役割は、私たちがクエリーしたテストユーザーのTokenを取得し、インタフェースをテストするときにBearer Tokenを設定することです.
これにより、JWTActingAsメソッドを使用して、クエリーの指定したユーザーにログインすることができます.最後に得られた応答$responseは,assertStatusにより応答結果が200と断言された.
public function JWTActingAs(User $user)
    {
        $token = $user->createToken($user->name . '-Token')->accessToken;
        $this->withHeaders(['Authorization' => 'Bearer '.$token]);
        $this->withHeaders(['OrganizationId' => 4]);

        return $this;
    }
public function index_tenant_role(){
        // 
        $response = $this->JWTActingAs($this->tenantUser)->json('GET','/api/tenantRole');
        $response->assertStatus(200);
    }

注意点


Auth::user()、すなわち現在ログインしているユーザに関する情報を取得するには、認証ユーザを偽造する必要がある.
// 
$this->be($this->user,'api');
/**
 *  
*/
 protected function makeRole(){
      $role = factory(Role::class)->create();

      // 
      $role->givePermissionTo(Permission::all();
      return $role;
}
/** @test*/
    public function delete_tenant_role(){
        // 
        $role = $this->makeRole();

        $response = $this->JWTActingAs($this->tenantUser)->json('DELETE','/api/tenantRole/'.$role->id);

        $response->assertStatus(200);

        $response = $this->JWTActingAs($this->tenantUser)->json('GET','/api/tenantRole/'.$role->id);

        $response->assertStatus(404); // 
    }

Unitテスト


関連テスト
/** @test */
    public function a_user_has_tenant(){
        // 
        $this->assertInstanceOf(Tenant::class,$this->user->tenant);
    }

    /** @test */
    public function a_user_has_organizations(){
        // 
        $this->assertInstanceOf('Illuminate\Database\Eloquent\Collection',$this->user->organizations);
    }