我正在尝试测试通过rails生成的“静态”页面(它们是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
我已尝试更改为可以渲染Flash通知的布局,甚至将文本插入布局模板,但无法使规范失败。
有没有办法让rspec用适当的布局渲染模板?
控制器是否以错误的方式尝试执行此操作? 它似乎不合适,因为它更多地与使用哪些布局及其内容有关,但渲染过程从控制器开始,它接收结果,我可以在渲染之前操作闪存哈希内容。
版本: rails(3.0.10), rspec-rails(2.6.1), rspec-core(2.6.4)
谢谢,尼克
答案 0 :(得分:0)
原来这不是正确的做法。它应该是一个集成测试(黄瓜,请求规范等),因为它正在测试几个层。那和rails似乎没有在这个级别上将模板呈现在它们的布局中。
所以在集成测试中: 通过向控制器发出请求来设置闪存消息,该控制器不执行任何其他操作(在测试代码中创建虚拟控制器和路由),然后点击关注页面并确保不呈现闪存通知。
e.g。 https://gist.github.com/1178383
这似乎是一个很长的路,但它会覆盖它。