我正在尝试测试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。有什么建议吗?
答案 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)
与问题不严格相关,但如果您最终在这里搜索此问题,则对类似情况很有用。