获取assert_select以显示元素实际是什么

时间:2016-08-21 12:22:50

标签: ruby-on-rails minitest

我有以下测试:

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"的内容? [编辑为清晰起见:“错误的标题”是返回页面中的标题,而不是文字字符串 - 也就是说,我需要错误来告诉我实际返回的内容。]

1 个答案:

答案 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可能是更好的风格!)