Capybara在页面上找不到链接

时间:2012-08-28 17:14:52

标签: ruby-on-rails-3 capybara rspec2

我正在尝试进行我的第一次水豚测试。我遵循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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分: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

另见SO上的答案:Rspec and capybara, difference between visit and get methods, with regards to the current_path object