我正在尝试进行我的第一次水豚测试。我遵循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标签的元素,但我可能会遗漏一些明显的东西
答案 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