rspec render_views игнорирует макеты? хочу проверить, статическая кэшированная страница не отображает флеш сообщение - PullRequest
1 голос
/ 28 августа 2011

Я пытаюсь проверить, что "статические" страницы (они ERB, но кэшируются), генерируемые через рельсы, не отображают какие-либо случайные флеш-уведомления, оставленные системой аутентификации (Devise) или где-либо еще.

Я пытался написать эту спецификацию контроллера, но похоже, что response.body отображает только шаблон, а не его макеты?

  describe "so that static caching can be used" do
    render_views
    specify "flash notices are not rendered" do
      # edit: the following flash lines don't do anything
      # it's not the right flash object, this one is intended for
      # inspecting after request not setting before request
      flash[:notice] = "flash boo" 
      flash[:error] = "flash boo"
      flash[:alert] = "flash boo"
      get :show, :page => 'privacy_policy'
      response.body.should have_content('flash boo')
    end
  end

class StaticPagesController < ApplicationController
  layout 'master'

  def show
    response.headers['Cache-Control'] = "public, max-age=#{6.hours}"
    render "static_pages/#{params[:page]}"
  end
end

Я попытался перейти на макет, который отображает флэш-уведомления и даже вставляет текст в шаблон макета, но не может привести к сбою спецификации.

Есть ли способ попросить rspec визуализировать шаблон с соответствующими макетами?

Является ли спецификация контроллера неправильным способом сделать это? Это кажется неуместным, так как это больше связано с тем, какие макеты используются, и их содержимым, но процесс рендеринга начинается на контроллере, он получает результат, и я могу манипулировать содержимым флэш-хеша перед рендерингом.

Версии: рельсы (3.0.10), рельсы rspec (2.6.1), rspec-core (2.6.4)

Спасибо, Ник

1 Ответ

0 голосов
/ 29 августа 2011

Оказывается, это не правильный подход. Это должен быть интеграционный тест (cucumber, request spec и т. Д.), Поскольку он тестирует несколько уровней. Это и rails, похоже, не отображают шаблоны внутри своих макетов на этом уровне.

Итак, в интеграционном тесте: Настройте флэш-сообщение, отправив запрос контроллеру, который больше ничего не делает (создайте фиктивный контроллер и проложите маршрут в своем тестовом коде), затем перейдите на страницу, вызывающую беспокойство, и убедитесь, что уведомление о флэш-памяти не отображается.

например. https://gist.github.com/1178383

Кажется, что далеко, но это покроет.

...