@Artem0071
Безработный mr. Junior

В чем ошибка при тестировании?

Хочу проверить, присоединяется ли роль "common_user" при создании пользователя

Создал Observer, в котором при создании пользователя добавляю роль (в бд все нормально добавляется, и выводит true):
class UserObserver
{
    /**
     * Handle to the user "created" event.
     *
     * @param  \App\User  $user
     * @return void
     */
    public function created(User $user)
    {
        $role = Role::where('name', 'common_user')->first();

        $user->attachRole($role);

//        dd($user->hasRole('common_user')); // здесь пишит true, то есть у пользователя роль добавилась
    }


Но в самом тесте:
public function test_created_user_has_user_role()
    {
        $email = $this->faker->email;

        $this->postJson(
            route('user.create'),
            [
                'email' => $email,
                'password' => $this->faker->password,
                'name' => $this->faker->name
            ]
        );

        $user = User::where('email', $email)->first();

        $this->assertNotNull(1, $user); // пользователь создан, (так же в Oberver'e true на присоединенной роли)

//        dd(Role::all()); // здесь просто проверил добавились ли роли (ДА, добавились)
//        $user->fresh(['roles']); // здесь пытался обновить модель, но не вышло

//        dd($user->roles); // здесь выводит Null, не понимаю почему

//        $testUser = User::where('email', $email)->first(); // попробовал получить новую модель

//        dd($testUser->roles); // почему то тоже отсутствуют роли...

        $this->assertTrue($user->hasRole('common_user')); // соответственно тут срабатывает ошибка, тк false
    }


То есть получается, что роли создались, присоединились к пользователю, но все равно какая то ошибка..
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
$user->load(['roles']);

$user->fresh(['roles']); // здесь пытался обновить модель, но не вышло
Метод fresh возвращает новый объект, а не изменяет текущий.

dd($user->roles); // здесь выводит Null, не понимаю почему
Вот это и вправду странно - должна была произойти ленивая загрузка. Покажите как у вас класс пользователя выглядит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы