У меня есть пользовательский контроллер со следующими правилами проверки:
public function store(Request $request) { ... $this->validate($request, [ 'name' => 'required', 'email' => 'email|required|unique:users', 'password' => 'confirmed|max:32|min:8|required', 'roles' => 'exists:roles,id|required', ]); $user = new User(); $user->fill($request->all()); ... }
Моя модель User.php определяет заполняемые свойства как:
protected $fillable = ['name', 'email'];
Чтобы пройти confirmed
проверку, я должен отправить поля password
и password_confirmation
в запрос POST.
Во время разработки все работает нормально, но в модульных тестах я получаю ошибку базы данных. Он пытается вставить данные в столбец password_confirmation. Это похоже на игнорирование массива $fillable
.
Я знаю, что «laravel потерял обработчики событий между тестами» ошибка / проблема ( https://github.com/laravel/framework/issues/1181 ). Поэтому я думаю, что, возможно, мне не хватает функции какой-либо модели, кроме Model::boot()
(я setUp()
User::boot()
в функции setUp()
в test).
Благодаря,
Читая исходный файл Model.php, я обнаружил, что кто-то вызывает Model::unguard()
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Model.php#L2180 после функции setUp () и перед тестом. Если я вызываю User::reguard()
в начале теста, он проходит, но (я не знаю почему) функции unguard () и reguard () вызывают несколько раз, и тест становится очень медленным.