Тестирование контроллера RSpec-пустой ответ.тело


Я застрял с проблемой при тестировании моих контроллеров с RSpec-ответом.зов тела всегда возвращает пустую строку. В браузере все отображается правильно, и тесты функций cucumber, похоже, правильно, но RSpec терпит неудачу каждый раз.

другие ожидания от объекта ответа, такие как response.should render_template('index') пройти без проблем.

кто-нибудь из вас сталкивался с этой проблемой раньше? Возможно, ответ html можно получить в каком-то другом путь?

как для версий, рельсы 2.1.0, RSpec 1.2.7.

4 91

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

вы можете прочитать больше об этом здесь.