#laravel #laravel-backpack
#laravel #laravel-рюкзак
Вопрос:
Я пытаюсь написать функциональный тест для проверки разрешений на доступ к CRUD для моей модели («company»), но он возвращает ошибку 500 вместо ожидаемых 200.
Мой код выглядит следующим образом:
public function testCompaniesOfficeAdmin()
{
$this->office_admin = User::factory()->create();
$this->office_admin->assignRole('office administrator');
Auth::guard(config('backpack.base.guard'))->login($this->office_admin);
$response = $this->actingAs($this->office_admin, 'web')->get('/company');
$response->assertStatus(200);
$response = $this->actingAs($this->office_admin, 'web')->get('/company/create');
$response->assertStatus(200);
}
Первое утверждение работает, как и ожидалось, но второе не выполняется с ошибкой 500, на которую жалуются
Исключение ErrorException: array_filter() ожидает, что параметр 1 будет массивом, значение null указано в файле /…/vendor/backpack/crud/src/app/Library/CrudPanel/Traits/SaveActions.php в строке 52
Я предполагаю, что он каким-то образом пытается сохранить данные при доступе к /company / create , что я ожидал бы для POST, но не для GET .
Что я делаю не так?
Комментарии:
1. Вы не можете выполнить get, когда пытаетесь протестировать сообщение, вот почему вы получаете ошибку 500 в первую очередь. Для теста create вы должны выполнить post-вызов с некоторыми поддельными данными в формате, ожидаемом post-запросом.
2. @Gi1ber7 op проверяет доступ к странице, которая разрешает действие create. Просмотр страницы на самом деле является запросом GET.
Ответ №1:
Если мы посмотрим vendor/backpack/crud/src/app/Library/CrudPanel/Traits/SaveActions.php
на строку, указанную в ошибке, мы увидим эту функцию:
/**
* Gets the save action that has the desired order.
*
* @param int $order
* @return array
*/
public function getSaveActionByOrder($order)
{
return array_filter($this->getOperationSetting('save_actions'), function ($arr) use ($order) {
return $arr['order'] == $order;
});
}
Что делает эта функция, получая доступные действия сохранения для этой кнопки на странице создания:
Тот факт, что вы получаете эту ошибку, говорит нам о том, что $this->getOperationSetting('save_actions')
она возвращается null
.
Что касается того, почему это возвращает null, я бы проверил, изменяет ли приложение save_actions
настройки где-либо, и начал искать там. Возможно, мы сможем дополнительно помочь, если вы опубликуете полный код контроллера CRUD.