Здравствуйте, потихоньку разбираюсь с тестами и начинают возникать вопросы по базовым вещам, по которым, тем не менее, не нахожу ответов. Я только начал осваивать документацию из 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 и прочее...
но прошу извинить, если что-то пропустил совсем очевидное
Как тестировать crud и сложную логику?
Re: Как тестировать crud и сложную логику?
1. Да, так. По шагам. Чтобы не мешала паджинация просто держим в базе две-три записи, вмещающиеся на одной странице.
2. Базу заполняем фикстурами, потом в ыункциональном тесте удаляем и смотрим, что записи нет.
3. Если функциональность API точно такая же, как и обычных страниц на простом стандартном CRUD, и если API используется только для себя, то можно и пропустить. А если отличается и если API публичное, то лучше протестировать api-тестами полностью.
4. Всё заполняется фикстурами. В тесте только запускаем отчёт и проверяем данные на совпадение. В фикстурах можно указывать id.
5. Да, в фикстурах указываем наборы пользователей и ролей.
2. Базу заполняем фикстурами, потом в ыункциональном тесте удаляем и смотрим, что записи нет.
3. Если функциональность API точно такая же, как и обычных страниц на простом стандартном CRUD, и если API используется только для себя, то можно и пропустить. А если отличается и если API публичное, то лучше протестировать api-тестами полностью.
4. Всё заполняется фикстурами. В тесте только запускаем отчёт и проверяем данные на совпадение. В фикстурах можно указывать id.
5. Да, в фикстурах указываем наборы пользователей и ролей.
Re: Как тестировать crud и сложную логику?
Спасибо за ответ.
Можете еще подсказать по атомарности операций? Есть допустим форма полей на 10-20. Какие то обязательные, на каких то свои условия и т.д. Я заполняю фикстуры на все возможные комбинации ошибок и получается большой массив. (см вложение - https://ibb.co/bsp8Lk)
Как правильно дальше? Писать отдельный тест на каждую запись, или будет достаточно в цикле в в одном тесте их перебрать?
Или я все неправильно совсем делаю? =)
Можете еще подсказать по атомарности операций? Есть допустим форма полей на 10-20. Какие то обязательные, на каких то свои условия и т.д. Я заполняю фикстуры на все возможные комбинации ошибок и получается большой массив. (см вложение - https://ibb.co/bsp8Lk)
Как правильно дальше? Писать отдельный тест на каждую запись, или будет достаточно в цикле в в одном тесте их перебрать?
Или я все неправильно совсем делаю? =)
Re: Как тестировать crud и сложную логику?
Я бы сделал три набора:
- missing
- invalid
- correct
Остальные уже по желанию.
- missing
- invalid
- correct
Остальные уже по желанию.