1

我正在尝试测试通过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)

谢谢,尼克

4

1 回答 1

0

事实证明这不是正确的方法。它应该是一个集成测试(黄瓜、请求规范等),因为它正在测试多个层。那和 rails 似乎没有在这个级别的布局中呈现模板。

所以在集成测试中:通过向不执行任何其他操作的控制器发出请求来设置 Flash 消息(在您的测试代码中创建一个虚拟控制器和路由),然后点击关注的页面并确保不呈现 Flash 通知.

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

这似乎是一个很长的路要走,但它会覆盖它。

于 2011-08-29T11:46:18.637 回答