Я пытаюсь протестировать довольно большое приложение на Rails, которое я, вероятно, должен был делать все время, но никогда не чувствовал себя полностью комфортно.Сейчас я работаю над функциональным тестом, чтобы проверить, успешно ли создан пользователь.В основном, я хотел бы проверить несколько вещей:
- был ли пользователь сохранен (т. Е. Есть ли новая запись в БД)
- была ли его информация (имя,адрес электронной почты и т. д.) является правильным
- , было ли автоматически добавлено несколько полей в базу данных перед созданием
- , было ли отправлено электронное письмо
- , соответствует ли текст сообщения (т.е. подставьте имя пользователя и ссылку активации в шаблоне электронной почты)
Насколько я понимаю, модульные тесты предназначены для тестирования моделей, а функциональные тесты должны тестировать контроллеры.Несколько тестов, о которых я упоминал выше, должны быть модульными, как я вижу, в частности, я думаю, что могу убедиться, что входные данные правильно сопоставлены с полями базы данных и что фильтр before_create работает в модульном тесте с моделью User.
Другие, кажется, призывают к функциональным тестам - отправлено ли электронное письмо (и, возможно, его текст - хотя, возможно, оно принадлежит тесту UserEmail?) И есть ли новая запись.
Вотвопрос о издевательстве / окурке.В функциональном тесте пользовательского контроллера я должен только удостовериться, что user.save вызван с соответствующими параметрами, или я должен проверить, что БД получает новую запись?Первый, кажется, вызывает заглушку и предполагает, что, поскольку Rails так хорошо протестирован, объект будет успешно сохранен, если .save вызывается в пользовательской модели.Но последний (например, вызов assert_difference) чувствует более тщательным.Какой выбрать?
Извините, если это слишком сложный вопрос - я понимаю, что это большая тема, но я надеюсь, что понимание конкретного (если длинный) примера, такого как это, прояснит многое о тестировании вгенерал.
Спасибо!