ROR教程书:为什么带有href =“#”的链接会通过检查另一页上内容的click_link测试?

时间:2014-09-18 19:55:26

标签: ruby-on-rails-4 rspec

在第5章末尾,有一些练习可以添加这些测试:

    click_link 'Contact'
    expect(page).to have_title(full_title('Contact'))


    click_link 'Home'
    click_link 'Sign up now!'
    expect(page).to have_title(full_title('Sign Up'))

    click_link 'sample app'
    expect(page).to have_title(full_title(''))
  end

full_title()的定义如下:

  def full_title(page_title) 
    base_title = "Ruby on Rails Tutorial Sample App"

    if page_title.empty?
      base_title
    else
      "#{base_title} | #{page_title}"
    end
  end

“立即注册!”按钮/链接将我带到一个包含此源html的页面:

<!DOCTYPE html>
<html>
<head>
    <title>Ruby on Rails Tutorial Sample App | Sign Up</title>
    ...
</head>

<body>
    <header class="navbar navbar-fixed-top navbar-inverse">

    <div class="navbar-inner">
      <div class="container">
        <a href="#" id="logo">sample app</a>

    ...

</html>

那么如何点击“示例应用”链接,使用href =“#”,转到标题所在的页面:

  

Ruby on Rails教程示例应用程序

即。主页?

1 个答案:

答案 0 :(得分:0)

啊...... has_title()会进行部分匹配,即has_title()检查页面上的标题是否包含指定的文本。因为注册页面上的标题是:

  

Ruby on Rails教程示例应用程序|注册

...包含full_title(''),即Ruby on Rails Tutorial Sample App,因此测试:

click_link 'sample app'
expect(page).to have_title(full_title(''))

通过。这是测试中的一个BUG。应该增加一个额外的测试:

click_link 'sample app'
expect(page).to have_title(full_title(''))
expect(page).not_to have_title("|")  #<--HERE

然后会失败。要使附加测试通过,您需要更改此_header.html.erb部分:

  <header class="navbar navbar-fixed-top navbar-inverse">
    <div class="navbar-inner">
      <div class="container">
        <%= link_to "sample app", "#", id: "logo" %>  #<--CHANGE THE LINK HERE

到此:

  <header class="navbar navbar-fixed-top navbar-inverse">
    <div class="navbar-inner">
      <div class="container">
        <%= link_to "sample app", root_path, id: "logo" %>

更改后,如果您点击任意页面上的SAMPLE APP徽标,您的浏览器将转到主页。