当他们调用url_for时,如何测试rails布局

时间:2011-07-20 21:46:34

标签: ruby-on-rails routing rspec

我有一个测试布局的测试用例。它会查看是否存在或存在不同类型用户的某些链接(例如,管理员链接)。这工作正常,直到我们开始本地化我们的一些界面。

describe "layouts/application" do
  include Devise::TestHelpers
  fixtures :users

  it "renders admin link for admin user" do
    @admin = users(:admin)
    sign_in(@admin)
    @locale = 'en'
    render
    rendered.should match(/Administration/)
  end
end

布局现在包含对<%= toggle_language%>的调用,它使用url_for生成类似当前的URL,但更改了:locale参数:

def toggle_language
  case locale
  when :fr
    other=:en
  when :en
    other=:fr
  else
    other=:fr
  end
  link_to t(:other_language), url_for(:locale => other)
end

问题在于,由于我没有名为“布局”的控制器,因此url_for无法生成所需内容。

1) layouts/application renders admin link for admin user
 Failure/Error: render
 ActionView::Template::Error:
   No route matches {:controller=>"layouts", :locale=>:fr, :action=>"application"}

我已经看过是否rspec render命令可能采用:controller,:action,我可以指向一个有效的路径。我还没有找到这样的东西。

1 个答案:

答案 0 :(得分:0)

是的,将其删除效果非常好。