TDD/BDD, в частности, для приложения Rails
Насколько гранулярным следует пользоваться при использовании методов TDD/BDD для разработки приложения? В частности, что касается приложения Rails.
Будете ли вы тестировать каждое отдельное поле, а затем правильно переносить его? Таким образом, каждое поле будет иметь свою собственную миграцию? Что бы вы на самом деле проверили, чтобы убедиться, что поле их?
Я действительно пытаюсь обернуть голову вокруг того, с чего начать и как получить гранулярность. Я начинаю и просто замираю, потому что не знаю, как проверить каждую мелочь.
Большинство примеров, которые я видел, используют валидацию в качестве примера. Я знаю, что до этого было написано намного больше кода, и я просто не знаю, как проверить самые простые вещи, такие как "должно иметь поле имени".
Буду признателен за любую оказанную помощь.
СПАСИБО!
2 ответа
Я не буду бурить это далеко вниз. На самом деле, я обычно не тестирую свои миграции, и, конечно, не стоит тратить ваше время (в целом) на тестирование геттеров и сеттеров. Придерживайтесь тестов, которые учат вас системе и выражают нетривиальные функциональные требования кода.
Что касается того, с чего начать: выберите требование, которое вы знаете, как тестировать - одно без внешних зависимостей, другое, где путь абсолютно ясен. Напишите тест (ы), чтобы описать желаемое поведение, реализовать его и реорганизовать код, чтобы удалить все уродство, которое вы, возможно, добавили во время реализации. После того, как вы сделали это для нескольких функций в списке, вы, вероятно, обнаружите, что некоторые из нечетких функций становятся в центре внимания, потому что вы создали необходимые им строительные блоки / зависимости.
Хорошей книгой, в которой более подробно рассматриваются методы тестирования, чем AWDR или The Rails Way, является Книга RSpec, бета-версия которой доступна в электронном виде.
Используете ли вы какие-либо инструменты для TDD/BDD, такие как огурец?
У них есть хорошая информация об использовании Cucumber с Rails.
По сути, напишите свою функцию, а затем эшафот, чтобы эта функция прошла испытания. Если вы хотите добавить другое поле в модель, сначала обновите функцию, дайте ей отказать, затем напишите миграцию и обновите представление, чтобы тесты прошли успешно.