Capybara在页面上找不到链接

her*_*hey 3 capybara rspec2 ruby-on-rails-3

我正试图让我的第一次水豚测试继续进行.我遵循Ryan Bate的理念并将一些功能测试放入我的控制器规范文件中.

describe UsersController do
  render_views

  it "can get the home page" do
    get 'home'
    response.body.should include("Login")
  end

  it "should log in" do
    get 'home'
    puts response.body
    click_link('Login')
    response.body.should include("Email")
    response.body.should include("Password")
  end

end
Run Code Online (Sandbox Code Playgroud)

在它应该登录我遇到问题所以开始只是试图确保我可以找到并单击链接.没运气.在上面的测试中,我只是想确保链接存在

puts response.body产生以下输出

...
  <div id="user_nav">
      <a href="/users/sign_up">Register</a> or <a href="/users/sign_in" id="Login">Login</a>
  </div>
...
Run Code Online (Sandbox Code Playgroud)

我也看到了实际页面上的元素.似乎只有我的测试找不到它.第一次测试确实通过了.

 1) UsersController should log in
     Failure/Error: click_link('Login')
     Capybara::ElementNotFound:
       no link with title, id or text 'Login' found
     # (eval):2:in `click_link'
     # ./spec/controllers/users_controller_spec.rb:14:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails 3.2,Rpsec 2.11和Capybara 1.1.2.

(我已经检查了stackoverflow上的其他问题以及一些教程和截屏视频.我看不出有任何理由找不到给定id标签的元素,但我可能遗漏了一些明显的东西.

Chr*_*erg 8

我认为它不起作用的原因是你正在使用get本质上是一个集成测试.看到这篇文章:http://blog.plataformatec.com.br/2012/06/improving-the-integration-between-capybara-and-rspec/

如果我的理解是正确的,您需要使用visit以便click_link在页面上使用:

it "should log in" do
  visit home_path
  click_link('Login')
  page.should ...
end
Run Code Online (Sandbox Code Playgroud)

另请参阅关于SO的答案:Rspec和capybara,visit和get方法之间的区别,关于current_path对象