Хитрый вопрос.Сначала я попытаюсь объяснить поведение, которое вы наблюдаете.Тогда я буду утверждать, что это не должно быть спецификацией представления, а более подробно раскрывать альтернативу, в которую я верю. Наконец, я расскажу вам, как на самом деле можно заставить ее работать.Если посмотреть спецификацию, код зависит от модели, имеющей все атрибуты.text_field
вызывает User#login
для заполнения значения формы, если оно должно быть.password_field
нет, потому что вы не хотите, чтобы поля вашего пароля были предварительно заполнены.Вот как они работают вне спецификаций, и это довольно ожидаемое поведение.Вот почему вы получаете поведение.
Что касается спецификаций вида, то этот не очень полезен.Две причины - (1) он не добавляет значения и (2) он хрупок:
- Единственное знание, указанное в этой спецификации, - это наличие двух полей ввода.Это не поможет вам управлять дизайном или узнавать поведение.Кроме того, это не защищает вас от вероятной ошибки.Единственная ошибка, которую вы можете предотвратить - это случайное удаление формы.На мой взгляд, это маловероятно.Лучше проверить, что должна делать отправка формы в интеграционном тесте (скажем, Cucumber или Steak)
- Из-за заглушки тест может прерваться при расширении
User
и представлении.Допустим, вы добавляете поле - сайт.Если вы просто добавите столбец в базу данных и в представление, тест не пройден, поскольку он пытается получить доступ к несуществующему (в заглушке) столбцу.Теперь у вас есть рабочий код, но неудачный тест.Вам придется пойти и добавить :website
в заглушку.И это только один из способов сломать это.По моему опыту, часто бывает так, что спецификация представления слишком легко нарушается, когда код работает.Это двойная проблема, когда вы зависите от помощников.
Я обнаружил, что у них есть только одно значение - тестирование интерфейса не-ActiveRecord :: Object.Вы строите представление сначала с помощью макета.Когда вы закончите, вы знаете, какие методы нужны вашей модели.
Альтернатива, которую я предпочитаю, - это тестировать подобные вещи в интеграции.Я лично использую огурец, хотя стейк тоже хорошо.Это дает вам лучшее освещение и меньше хрупкости.По моим наблюдениям, спецификации в списке рассылки rspec несколько вышли из моды.Вы можете найти более подробную информацию о том, почему их избегать.Вот одна нить , в которой я разделяю некоторые мои чувства.
Наконец, если мне не удалось убедить вас отказаться от этого пути, посмотрите factory_girl .Он предоставляет аккуратный метод, называемый build_stubbed
, который дает вам заглушенную модель, которую можно использовать в form_for
.Хотя я использовал это пару раз, я всегда сожалел об этом позже.
Конечно, YMMV.