2014-08-28 89 views
0

这里是我的html:为什么rspec无法看到我的链接?

<li class="dropdown"> 
    <a data-toggle="dropdown" class="dropdown-toggle" href="#"> 
     <i class="fa fa-user"></i> Register/Login <b class="caret"></b> 
    </a> 
    <ul class="dropdown-menu"> 
     <li> 
      <a href="/sign_in"><i class="fa fa-fw fa-circle-o"></i> login </a> 
     </li> 
     <li> 
      <a href="/sign_up"><i class="fa fa-fw fa-circle-o-notch"></i> Register </a> 
     </li> 

     <li class="divider"></li> 
    </ul> 
</li> 

这是我的期望:

it { should have_link 'Register', href: registration_path } 

然而,该规范将失败,即使注册链接明显存在。如果我将链接移出<ul>这样:

<a href="/sign_up"><i class="fa fa-fw fa-circle-o-notch"></i> Register </a> 
<li class="dropdown"> 
    <a data-toggle="dropdown" class="dropdown-toggle" href="#"> 
     <i class="fa fa-user"></i> Register/Login <b class="caret"></b> 
    </a> 
    <ul class="dropdown-menu"> 
     <li> 
      <a href="/sign_in"><i class="fa fa-fw fa-circle-o"></i> login </a> 
     </li> 
     <li> 

     </li> 

     <li class="divider"></li> 
    </ul> 
</li> 

规范通过。为什么是这样?

+0

难道是可能的,你有一个名为“注册”另一条链路没有注册路径? “注册/登录”可能是一个问题 – usha 2014-08-28 12:18:06

回答

1

我猜你正在使用水豚。

水豚不会检测到隐藏的元素。 您需要点击一个“.dropdown拨动”元素,然后选中‘注册’链接。 这只在使用javascript驱动程序时才有效(硒,poltergeist等)

这是一种很好的方式 - 您正在模拟真实的用户行为。 但是,你可以尝试change capybara's behavior

it "should have Register link", js: true do 
    find('.dropdown-toggle').click 
    expect(page).to have_link('Register', href: registration_path) 
end 
相关问题