Хороший вопрос, с которым я недавно столкнулся при работе с приложением Rails, также использующим Cucumber / RSpec. Я стараюсь тестировать как можно больше на каждом уровне, однако я также обнаружил, что с ростом базы кода я иногда чувствую, что повторяю себя без необходимости.
Используя тестирование "извне", мой процесс обычно выглядит примерно так: Сценарий огурца -> Спецификация контроллера -> Спецификация модели. Все больше и больше я пропускаю спецификации контроллера, так как сценарии огурца охватывают большую часть их функциональных возможностей. Я обычно возвращаюсь и добавляю спецификации контроллера, но это может показаться чем-то вроде хлопот.
Один шаг, который я делаю регулярно, - это запуск rcov для моих функций огурца с rake cucumber:rcov
и поиск заметных пробелов в покрытии. Это те области кода, на которых я сосредоточен, чтобы они имели достойный охват, будь то модульные или интеграционные тесты.
Я считаю, что модели / библиотеки должны быть всесторонне протестированы, так как это основная бизнес-логика. Он должен работать изолированно, вне обычного процесса веб-запроса / ответа. Например, если я взаимодействую со своим приложением через консоль Rails, я работаю напрямую с бизнес-логикой и хочу убедиться, что методы, которые я вызываю в моих моделях / классах, хорошо протестированы.
В конце концов, каждое приложение уникально, и я думаю, что разработчик (и) должен определить, сколько тестового покрытия должно быть выделено для различных частей кодовой базы, и найти правильный баланс, чтобы ваш набор тестов не утомляет вас, когда ваше приложение растет.
Вот интересная статья, которую я выкопал из своих закладок, которую стоит прочитать:
http://webmozarts.com/2010/03/15/why-not-to-want-100-code-coverage/