2011-03-19 71 views
7

我正在做第五章的练习。我应该测试链接到正确的页面。这是我的测试代码。我的rspec测试不会通过:Michael Hartl的rails教程

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!" 
+1

我也试着设置:“立即注册”内容=>只是为了试验,但问题似乎是找到root_path上的链接而不是响应。 – 2011-03-19 12:04:09

+0

长镜头,但如果您删除感叹号,它会工作。 'click_link“立即注册”' – lebreeze 2011-03-19 12:10:30

+0

刚刚尝试过。它给了我同样的错误。我也尝试过!脱离链接。 – 2011-03-19 12:38:51

回答

9

我认为,问题是,链接实际上并不在所有页面上,而这个测试实际上是在浏览页面。

至少在本教程的前一版本中,该链接仅在主页上显示。

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

一个更好的测试可以在与主页相关的独立测试中进行检查。

+0

真棒!我继续前进,并进行了独立测试。我没有意识到它正在测试所有的页面。我认为,因为我把访问root_path,它只在主页上测试链接。 – 2011-03-19 13:32:17

+1

我也挂了,你提供了答案,@DonRoby。谢谢! – BenU 2012-05-13 22:39:12

0

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

线必须是:

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

现有答案的建议做了visit root_path是不必要的,如果页面访问之前这个人是"Home"

+0

只是澄清了Marc的声明--- click_link函数实际上,你知道,*导航到那个页面。* Rspec不是测试*所有页面,只是它碰巧正在访问的那一刻。正如马克指出的那样,如果这恰好是“家庭”,那么“立即注册!”链接将可用。 – invaliduser 2011-05-28 02:58:55

0

究其原因,测试将无法正常工作是因为你需要运行:

$ rake db:test:prepare 

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

我找到了解决办法in this forum

相关问题