RSpec查看测试和content_for:标题

时间:2014-09-01 20:03:04

标签: ruby-on-rails rspec capybara

我正在尝试测试application/layout.html.erb标题标记:

<title><%= content_for?(:title) ? yield(:title) : "Foo Bar" %></title>

但是我找不到设置标题变量的方法:

it "should show a title" do
  # NameError: `title' is not allowed as an instance variable name
  #view.instance_variable_set(:title, 'Test Title')

  # Deprecation error
  # view.stub(:title) { 'Test Title' }

  # Fail:
  # allow(view).to receive(:title) { 'Test Title' }
  # view.content_for(:title) { 'Test Title' }
  # assign(:title, 'Test Title')
  # helper.stub(:content_for).with(:title).and_return('Test Title')

  render

  expect(rendered).to have_title('Test Title')
end

我正在使用Rails 4.1.4,rspec-rails 3.0.2,Capybara 2.4.1。有什么建议吗?

3 个答案:

答案 0 :(得分:6)

你可以做这样的事情

 view.instance_variable_get("@view_flow").set(:title,"Test Title")
 render
 expect(rendered).to have_title('Test Title')

答案 1 :(得分:0)

如果有人需要使用Minitest执行此操作:

def setup
  @view_flow = ActionView::OutputFlow.new
end

test 'when page_title is set' do
  @view_flow.set(:page_title, "Hello") 
  expected_html = '<title>Hello | My Amazing Website</title>'
  assert_equal expected_html, title
end

答案 2 :(得分:0)

如果您需要测试 content_for 块的结果,您可以使用

访问它
view.content_for(:title)

与问题不严格相关,但如果您最终在这里搜索此问题,则对类似情况很有用。