为什么rspec看不到我的链接?

时间:2014-08-28 12:07:41

标签: ruby-on-rails rspec

这是我的html:

<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>

规范通过。这是为什么?

1 个答案:

答案 0 :(得分:1)

我猜你正在使用水豚。

Capybara不会发现隐藏的元素。 您需要点击&#39;。dropdown-toggle&#39;元素,然后检查&#39;注册&#39;链接。 这只适用于使用javascript驱动程序(selenium,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