Невозможно использовать Illuminate \ Contracts \ Auth \ Authenticatable - это не черта - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь протестировать свое приложение для входа и выхода с помощью jwtToken. Я потерян с Laravel Контрактом и Чертой. Я прочитал много вопросов / ответов, но решения не могут работать с моим кодом. Я понимаю, что контракт не работает как черта, но он, кажется, довольно тесно связан. Я искал выход из ситуации 3 дня, но безуспешно.

У меня есть эта ошибка, поскольку я включил ActingAs в свой тест.

Не могли бы вы мне помочь, пожалуйста?

Моя модель пользователя:


namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Auth\UserInterface; 
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Role;
use App\Models\UserAddress;


class User extends Authenticatable implements 
    JWTSubject,
    AuthenticatableContract
{
    use Notifiable;
    use SoftDeletes;
    use Authenticatable;

Я также пытаюсь без implements AuthenticatableContract Я также пытаюсь без первого использования, без второго использования.

Мой TestCase:


namespace Tests;

use App\Models\Role;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;


abstract class TestCase extends BaseTestCase
{
    use CreatesApplication;

    /**
     * @var User
     */
    protected $user;

    public static $admin;

    public static $faker;

    public function setUp(): void
    {
        parent::setUp();

        self::$faker = \Faker\Factory::create('fr_FR');


        self::$admin = \App\Models\User::with('role')
            ->select('*')
            ->join('roles', 'roles.id_role', '=', 'users.id_role')
            ->where('slug', 'admin')
            ->first()->user;

Мой аккаунт Тест:


namespace Tests\Feature;

use Carbon\Carbon;
use Tests\TestCase;
use App\Models\Role;
use App\Models\User;
use Tymon\JWTAuth\JWTAuth;
use Illuminate\Auth\AuthenticationException;

use Illuminate\Contracts\Auth\Authenticatable;

[...]
 public function testLogout() {

        // $user =  User::inRandomOrder()->firstOrFail();
        // \Log::debug('user->first_name : ' . $user->first_name);

        $this->actingAs(self::$admin)
            ->json('POST', 'api/auth/logout')
            ->assertStatus(200); 
    }```

1 Ответ

0 голосов
/ 15 апреля 2020

Это неверно:

class User extends Authenticatable implements 
    JWTSubject,
    AuthenticatableContract
{
    use Notifiable;
    use SoftDeletes;
    use Authenticatable;
}

Вы не можете extend Authenticatable и use Authenticatable.

Authenticatable не является признаком (как говорится в ошибке). Это абстрактный класс и может быть расширен только.

Подробнее о разнице между чертами и абстрактными классами можно прочитать здесь: Разница между чертой и абстрактным классом в PHP

Удаление оператора use должно исправить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...