Проверка контроллера 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"

Для меня последнее кажется немного более гибким, поскольку оно будет работать в любом случае, но оно может быть неприемлемым во всех случаях.

Приветствия,

Джон