У меня есть следующие таблицы, пользователи, роли и role_user, которые создают отношение «многие ко многим».
В своей UserFactory при создании пользователей я назначаю им основную роль «user», например:
$factory->afterCreating(User::class, function ($user, $faker){
$roles = Role::where('name', 'user')->get();
$user->roles()->sync($roles->pluck('id')->toArray());
});
А затем в своем модульном тесте я могу проверить пользователей, что они перенаправляются с 302 при попытке доступа к страницам администратора:
$this->actingAs(factory(\App\User::class)->make());
$request = Request::create('/admin', 'GET');
$middleware = new AccessAdmin;
$response = $middleware->handle($request, function () {});
$this->assertEquals($response->getStatusCode(), 302);
Это работает, как и ожидалось, но проблема заключается в том, чтопроверяя обратное с администратором, я не уверен, как имитировать реляционные данные.Я попытался создать пользователя, а затем прикрепить роли следующим образом:
$user = factory(\App\User::class)->make();
$roles = Role::where('name', 'admin')->get();
$user->roles()->sync($roles->pluck('id')->toArray());
Это дает мне следующую ошибку:
PDOException: SQLSTATE [23000]: нарушение ограничения целостности:1048 Столбец 'user_id' не может быть пустым
Это правильно, потому что пользователь никогда не создается в БД, поэтому у пользователя нет идентификатора.
Как я высмеиваю пользователя / рольотношения?