Laravel 5: Model-> fill () игнорирует свойство $ fillable в модульных тестах

У меня есть пользовательский контроллер со следующими правилами проверки:

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 () вызывают несколько раз, и тест становится очень медленным.