Как тестировать crud и сложную логику?

Всё про тестирование в Yii 2.0
Ответить
yujin1st
Сообщения: 192
Зарегистрирован: 2012.03.26, 12:03

Как тестировать crud и сложную логику?

Сообщение yujin1st »

Здравствуйте, потихоньку разбираюсь с тестами и начинают возникать вопросы по базовым вещам, по которым, тем не менее, не нахожу ответов. Я только начал осваивать документацию из http://codeception.com/docs/ и спрашиваю вопросы по ходу их возникновения... и заранее прошу прощения если там все описано, и я просто еще не дошел до ответов - пожалуйста, просто скажите об этом.


1. CRUD
В примерах да найденных источниках вижу только проверки на валидацию на одно сообщение об успешном добавлении/редактировании.
А что делать если надо что-то посложнее: когда есть связи или сложная логика по сохранению служебных полей и надо проверить отображение на других страницах и связи с другими страницами? Какой сценарий? Я вижу это так, но все ли верно?
1. Отправили форму, проверили всю валидацию, получили удачное сообщение.
2. Загружаем из базы новую запись по id и проверяем атрибуты
3. Заходим по адресу где выводиться список записей (record/index) и смотрим на наличие, не забывая rbac. (Здесь вопрос - как быть с пагинацией?)
4. Заходим на страницу с записью. Проверяем Rbac, проверяем все поля и их вывод.

2. CRUD - удаление
Допустим при удалении удаляются связанные данные, что-то скрывается, что-то появляется.
Верно что я должен в базу добавить несколько записей, поизменять их, потом поудалять - и смотреть на соответствующих страницах все ли исчезло? Опять таки - как быть с пагинаций?

3. Есть ли специфика для REST API?
Надо ли дублировать тесты дублирующегося функционала или написанного выше для обычных страниц будет достаточно?

4.А если надо проверить какой-нибудь отчет с множеством данных? Получается много мелких вопросов:
Как загрузить кучу связанных записей? Через форму, через AR или напрямую через бд? Я правильно понимаю, что здесь используются фикстуры и тот же Faker?
Как быть с тем что некоторые страницы доступны только после добавления записей по их id: где-то в тестах сохранить идентификаторы новых записей или есть другой подход?

5. Если надо проверять rbac, а именно разный доступ, правильно понимаю что в тестовой базе должен быть уже набор пользователей и каких то данных, а дальше при каждой отдельной проверке дамп заливается заново?

PS:
В целом просмотрел этот форум, просмотрел статьи от @elisdn, гуглил SO на предмет yii, crud, test и прочее...
но прошу извинить, если что-то пропустил совсем очевидное
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как тестировать crud и сложную логику?

Сообщение ElisDN »

1. Да, так. По шагам. Чтобы не мешала паджинация просто держим в базе две-три записи, вмещающиеся на одной странице.

2. Базу заполняем фикстурами, потом в ыункциональном тесте удаляем и смотрим, что записи нет.

3. Если функциональность API точно такая же, как и обычных страниц на простом стандартном CRUD, и если API используется только для себя, то можно и пропустить. А если отличается и если API публичное, то лучше протестировать api-тестами полностью.

4. Всё заполняется фикстурами. В тесте только запускаем отчёт и проверяем данные на совпадение. В фикстурах можно указывать id.

5. Да, в фикстурах указываем наборы пользователей и ролей.
yujin1st
Сообщения: 192
Зарегистрирован: 2012.03.26, 12:03

Re: Как тестировать crud и сложную логику?

Сообщение yujin1st »

Спасибо за ответ.
Можете еще подсказать по атомарности операций? Есть допустим форма полей на 10-20. Какие то обязательные, на каких то свои условия и т.д. Я заполняю фикстуры на все возможные комбинации ошибок и получается большой массив. (см вложение - https://ibb.co/bsp8Lk)
Как правильно дальше? Писать отдельный тест на каждую запись, или будет достаточно в цикле в в одном тесте их перебрать?
Или я все неправильно совсем делаю? =)
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как тестировать crud и сложную логику?

Сообщение ElisDN »

Я бы сделал три набора:

- missing
- invalid
- correct

Остальные уже по желанию.
Ответить