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