Как отключить рендеринг представления в ActionController TestCase (Rails 3.0.9)

Каков правильный способ отключить ActionController::TestCase для фактического отображения представлений? В качестве альтернативы, как можно отобразить представление без макета в тестах?

Используя rr, я попробовал stub(@controller).render { "" }

но это нарушило утверждения assert_template.

Спасибо!


person zoli    schedule 13.07.2011    source источник
comment
Почему вы хотите это сделать?   -  person p.matsinopoulos    schedule 04.09.2012
comment
Я больше не могу вспомнить. Вероятно, это было что-то вроде представления, пытающегося получить доступ к чему-то, настроенному в before_filter, или к чему-то, что правильно инициализировано только в производственной среде.   -  person zoli    schedule 05.09.2012


Ответы (3)


У меня была такая же проблема с отключением только макета при отображении основного вида. С rspec mocks это работает для меня:

@controller.stub(:layout).and_return(false)

Я никогда не использовал rr, но могу предположить, что синтаксис может быть следующим:

stub(@controller).layout { false }
person Sanjay Ginde    schedule 03.06.2013

Я хотел сделать это в Rails 6. С драгоценным камнем мокко:

ActionController::Metal.any_instance.stubs(:process).returns

Для других версий Rails самый простой способ определить ответ — добавить puts caller к вашему действию и просмотреть обратную трассировку. Найдите что-то, что выглядит легко заглушить, и попробуйте.

person Adam    schedule 17.01.2020

По умолчанию он отключен.

Если вы хотите включить, вы можете:

1) вызовите это в spec_helper:

config.render_views

2) поместите этот оператор в тестовый класс вашего контроллера:

render_views

Если вы хотите отключить его, просто добавьте ложный параметр, например:

render_views false

Ссылка: https://www.relishapp.com/rspec/rspec-rails/v/2-5/docs/controller-specs/render-views

person hsgubert    schedule 14.09.2012