我有以下测试:
test "users title when logged out" do
get users_path
assert_select "title", 'Correct title"
end
如果我们假设users_path返回一个<title>Wrong title</title>
的页面,那么我得到以下输出:
FAIL["test_users_title_when_logged_out", SiteLayoutTest, 1.0830602300120518]
test_users_title_when_logged_out#SiteLayoutTest (1.08s)
Expected at least 1 element matching "title", found 0..
Expected 0 to be >= 1.
test/integration/site_layout_test.rb:37:in `block in <class:SiteLayoutTest>'
我想用assert_equal "Correct title", page.title
之类的东西替换assert_select,以便测试失败消息实际显示页面的标题是什么,这样可以更容易地跟踪问题! (当然,页面在开发模式中显示正确的标题......)
然而,page.title似乎不可用,而我在搜索方面的努力只会出现“你可以用Capybara做的事”,这对于这个目的来说有点笨重!
有没有办法编写此测试,以便显示类似Expected page title to be "Correct title" but got "Wrong title"
的内容? [编辑为清晰起见:“错误的标题”是返回页面中的标题,而不是文字字符串 - 也就是说,我需要错误来告诉我实际返回的内容。]
答案 0 :(得分:0)
看起来答案是assert_equal 'Correct title', css_select('title').first.content
。
这提供了更有用的失败消息
FAIL["test_users_title_when_logged_out", SiteLayoutTest, 1.0830602300120518]
test_users_title_when_logged_out#SiteLayoutTest (1.08s)
Expected: "Correct title"
Actual: "Wrong title"
(虽然我怀疑在我发现问题后恢复原始的assert_select可能是更好的风格!)