Из Rails 3/Rspec 2 я пытаюсь использовать ссылку render_views в спецификациях контроллера. Проблема, с которой я столкнулся, заключается в том, что мы только что установили гем пейджера kaminari, и я хочу заглушить вызов <%= paginate @sites %>
из моего представления, поэтому мне не нужно вручную заглушать все внутренние методы, которые kaminari определяет в коллекции для использования с помощником paginate
.
Если бы это было в спецификации представления, я мог бы заглушить вспомогательный метод, вызвав view.stub(:paginate)
, но я не могу найти способ получить дескриптор объекта представления из спецификации контроллера (например, controller.view.stub(:paginate)
). Есть ли какой-либо способ сделать это, или наши варианты либо отключают render_views для этого метода, либо заглушают кучу внутренних методов kaminari, которые не имеют отношения к нам (поскольку они должны быть покрыты тестами kaminari и могут измениться в будущие версии)?
describe SitesController do
render_views
def mock_site(stubs={})
@mock_site ||= mock_model(Site, stubs).as_null_object
end
describe "GET index" do
it "assigns all sites as @sites" do
Site.stub_chain("enabled.ordered.page") {[mock_site]}
# want to do something here like: controller.view.stub(:paginate)
get :index
assigns(:sites).should eq([mock_site])
end
end
end
1 ответ
Либо я не нашел подходящего решения.
Возможно, вы захотите изучить controller.view_context
немного подробнее.
То, что я остановился (на данный момент), это патч для обезьян в rspec/support/kaminari.rb:
module Kaminari::ActionViewExtension::InstanceMethods
def paginate(scope, options = {}, &block)
puts "Should test pagination"
end
end
Таким образом, он молча терпит неудачу при нумерации страниц.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.