2011-08-28 44 views
1

我試圖測試通過導軌生成的「靜態」頁面(它們是ERB,但獲得緩存),不會呈現任何遺留閃光通知認證系統(設計)或其他地方。rspec render_views忽略佈局?想要測試靜態緩存頁面不顯示Flash消息

我試過編寫這個控制器規範,但看起來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的核心(2.6.4)

謝謝,尼克

回答

0

原來這不是正確的做法。它應該是一個集成測試(黃瓜,請求規格等),因爲它正在測試幾個層次。這和rails似乎並沒有在這個級別的佈局中渲染模板。

所以在集成測試: 通過向一個控制器,它沒有別的要求建立一個閃光消息(建立在你的測試代碼的虛擬控制器&路由),然後按所關注的網頁,並確定閃光通知未呈現。

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

這似乎很漫長,但它會覆蓋它。