我的rspec测试不会通过:Michael Hartl的rails教程

时间:2011-03-19 12:00:56

标签: ruby-on-rails tdd rspec

我在第五章结束时做了练习。我应该测试链接转到正确的页面。这是我的测试代码。

require 'spec_helper'

describe "LayoutLinks" do

    it "should have the right links on the layout" do
        visit root_path
        click_link "About"
        response.should have_selector('title', :content => "About")
        click_link "Home"
        response.should have_selector('title', :content => "Home")
        click_link "Help"
        response.should have_selector('title', :content => "Help")
        click_link "Contact"
        response.should have_selector('title', :content => "Contact")
        click_link "Sign up now!"
        response.should have_selector('title', :content => "Sign up")
        end
        end

除最后一次测试外,一切都通过了。它说无法找到文本“立即注册!”的链接。 。我知道该页面确实有“立即注册!”链接。我认为它可能在源代码中呈现不同,但是当我查看源代码时它看起来很正常<a href="/signup" class="signup_button round">Sign up now!</a>。根据我的理解,它应该点击链接,然后测试标题是否匹配:内容符号。我误解了什么吗?

这是我得到的错误:

Failures:

  1) LayoutLinks should have the right links on the layout
     Failure/Error: click_link "Sign up now!"
     Webrat::NotFoundError:
       Could not find link with text or title or id "Sign up now!"

3 个答案:

答案 0 :(得分:9)

我认为问题在于“立即注册!”事实上,链接并非在所有页面上都有,并且此测试实际上导航了页面。

至少在我之前运行的本教程版本中,该链接仅在主页上。

如果您在最后visit root_path之前添加click_link,则可能会有效。

更好的测试是检查与主页相关的独立测试。

答案 1 :(得分:0)

此外,标题文字为"Sign Up"。资本'U'。

该行必须是:

response.should have_selector('title', :content => "Sign Up")

如果在此visit root_path

之前访问过的网页,则不需要先前的答案提出"Home"的建议

答案 2 :(得分:0)

测试不起作用的原因是因为你需要运行:

$ rake db:test:prepare  

至少,这就是为什么我的测试没有通过。

我找到了解决方案in this forum