Тестирование контроллера RSpec-пустой ответ.тело
Я застрял с проблемой при тестировании моих контроллеров с RSpec-ответом.зов тела всегда возвращает пустую строку. В браузере все отображается правильно, и тесты функций cucumber, похоже, правильно, но RSpec терпит неудачу каждый раз.
другие ожидания от объекта ответа, такие как response.should render_template('index')
пройти без проблем.
кто-нибудь из вас сталкивался с этой проблемой раньше? Возможно, ответ html можно получить в каком-то другом путь?
как для версий, рельсы 2.1.0, RSpec 1.2.7.
4 ответа:
по умолчанию rspec-rails hacks into Rails to запретить это из собственно шаблонов представления рендеринга. Вы должны проверять только поведение ваших действий и фильтровать тесты вашего контроллера, а не результат рендеринга шаблона - вот для чего нужны спецификации view.
однако, если вы хотите, чтобы ваши спецификации контроллера отображали шаблоны, как обычно, используйте
render_views
:describe YourController do render_views ... end
response.body.should =~ /Invalid email or password/
может быть эквивалентной проверкой:
flash[:alert].should == "Invalid email or password"
для меня последний кажется немного более гибким, поскольку он будет работать в любом случае, но это может быть не совсем уместно случаи.
спасибо,
Джон
RSpec 2+: Если вы хотите проверить end to end-url to response body-используйте запрос spec вместо спец контроллер.
по умолчанию конфигурация RSpec-rails отключает рендеринг шаблонов для спецификаций контроллера
один из способов исправить это, убедившись, чтобы
render_views
настройки . Таким образом, Вы делаете его способным работать глобально во всех ваших тестах.RSpec.configure do |config| config.render_views end
или использовать объявление render_views отдельной группы:
describe User do render_views end
вы можете прочитать больше об этом здесь.