Тестирование FormRequests в Laravel

Я просто хотел знать, какой лучший метод для тестирования FormRequests и Controllers - в частности, как можно проверить логику проверки.

В качестве примера у меня есть класс запроса формы (PersonRequest), настроенный следующим образом:

public function rules()
{
    return [
        'name' => 'required',
        'address' => 'required',
        'email' => 'email|required',
        'website' => 'nullable|url'
    ];
}

И затем в моем контроллере я написал тесты для:

public function it_can_store_a_person();
public function it_cannot_store_a_person_without_a_name();
public function it_cannot_store_a_person_without_an_address();
public function it_cannot_store_a_person_without_an_email();
public function it_cannot_store_a_person_with_an_invalid_email();
public function it_cannot_store_a_person_with_an_invalid_website();

Тогда у меня были бы те же функции, но для "обновления", но это, похоже, повторение тестовых функций "сохранения".

Все это работает, но кажется излишним и может привести к большому количеству тестов, если бы критериев было больше.

Могу ли я написать отдельный тест для проверки правил проверки (пример приведен в Модульный тест FormRequest Laravel) и игнорировать их в контроллере и поэтому просто проверить правильное сохранение и недопустимое сохранение. то есть

public function it_can_save_a_person();
public function it_cannot_save_a_person_if_an_error_occurs();

Я также читал, что FormRequests тестируются внутри, и поэтому мне нужно будет проверить их снова.

Любые советы, рекомендации по передовому опыту будут с благодарностью получены.

Мне тоже интересно узнать больше. Недавно я задумался, и мне было интересно, действительно ли нам нужно тестировать логику проверки. Я имею в виду, что Laravel уже делает это. Это не должно быть нашей ответственностью, верно? Возможно, мы можем проверить, получают ли наши поля соответствующие правила проверки.

Mozammil 28.01.2019 18:15

Учитывая это, я немного подумал, и мне интересно, является ли тестирование всех проверок более функциональным, чем модульное тестирование. Мы знаем, что Laravel будет правильно генерировать ошибки (это было протестировано внутри), поэтому мы должны быть в порядке, просто проверяя, что одно правило (любое правило) возникает и отображается, что должно выполняться через контроллер. Я думаю, что тестирование всех правил — это скорее тестирование функций, когда вы хотите протестировать комбинации, чтобы убедиться, что они проходят или не проходят, и отображают правильное сообщение. Не уверен, что этот последний шаг действительно необходим, но я часто меняю текст сообщения об ошибке по умолчанию, поэтому было бы полезно знать, что этот текст используется.

Zakalwe 04.02.2019 11:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
518
0

Другие вопросы по теме