1

レールを介して生成された「静的」ページ(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に依頼する方法はありますか?

コントローラーの仕様は、これを試みる間違った方法ですか? 使用されているレイアウトとその内容に関係しているため、場違いに思えますが、レンダリング プロセスはコントローラーで開始され、結果を受け取り、レンダリング前にフラッシュ ハッシュの内容を操作できます。

バージョン: rails (3.0.10)、rspec-rails (2.6.1)、rspec-core (2.6.4)

ありがとう、ニック

4

1 に答える 1

0

これは正しいアプローチではないことがわかりました。複数のレイヤーをテストしているため、統合テスト (キュウリ、要求仕様など) である必要があります。それとレールは、このレベルでレイアウト内のテンプレートをレンダリングしていないようです。

したがって、統合テストでは、他に何もしないコントローラーにリクエストを送信してフラッシュメッセージを設定し(テストコードでダミーコントローラーとルーティングを作成します)、関心のあるページにアクセスして、フラッシュ通知がレンダリングされないことを確認します.

例: https://gist.github.com/1178383

それは長い道のりのように思えますが、それをカバーします。

于 2011-08-29T11:46:18.637 に答える