Тестирование контроллера RSpec - пустой response.body - PullRequest
96 голосов
/ 30 июня 2009

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

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

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

Что касается версий, Rails 2.1.0, RSpec 1.2.7.

Ответы [ 4 ]

179 голосов
/ 30 июня 2009

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

Однако, если вы хотите, чтобы спецификации контроллера отображали шаблоны, как это обычно делается в приложении, используйте директиву render_views:

describe YourController do
  render_views
  ...
end
3 голосов
/ 09 июля 2013

RSpec 2+: если вы хотите проверить сквозную - URL к телу ответа - используйте спецификацию запроса вместо спецификации контроллера .

2 голосов
/ 13 сентября 2012

Когда я работал с похожей проблемой (которая привела меня к этому вопросу), мне пришло в голову, что есть разные способы обшить одну и ту же кошку. Другими словами, вместо проверки основного текста вы можете проверить содержимое флэш-памяти.

response.body.should =~ /Invalid email or password/

может быть эквивалентно проверке:

flash[:alert].should == "Invalid email or password"

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

Приветствия

John

1 голос
/ 01 марта 2018

По умолчанию конфигурация RSpec-rails отключает рендеринг шаблонов для спецификаций контроллера

Одним из способов решения этой проблемы является включение параметра render_views в файле rails_helper.rb. Таким образом, вы сможете работать глобально во всех ваших тестах.

RSpec.configure do |config|
  config.render_views
end

Или используйте объявление render_views для отдельной группы:

describe User do
  render_views
end

Вы можете узнать больше об этом здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...