【问题标题】:my rspec test won't pass: Michael Hartl's rails tutorial我的 rspec 测试不会通过:Michael Hartl 的 rails 教程
【发布时间】:2011-03-19 12:00:56
【问题描述】:

我在第五章的末尾做练习。我应该测试链接到正确的页面。这是我的测试代码。

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> 。据我了解,它应该单击链接,然后测试标题是否与 :content 符号匹配。我是不是误会了什么?

这是我得到的错误:

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

【问题讨论】:

  • 我也尝试设置 :content => "立即注册!"只是为了试验,但问题似乎是在 root_path 上而不是在响应中找到链接。
  • 长镜头,但如果您删除感叹号,它是否有效。 click_link "Sign up now"
  • 刚刚试过。它给了我同样的错误。我也试过服用!脱离链接。
  • FWIW,我不喜欢该教程的少数几件事之一是对控制器规格的依赖。黄瓜故事效果更好。

标签: ruby-on-rails tdd rspec


【解决方案1】:

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

至少在我前段时间浏览的本教程版本中,该链接仅在主页上。

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

更好的测试应该是在一个专门与主页相关的独立测试中进行检查。

【讨论】:

  • 太棒了!我继续进行了独立测试。我没有意识到它正在测试所有页面。我以为是因为我把 visit root_path 放在了只在主页上测试链接。
  • 我也被挂断了,你提供了答案,@DonRoby。谢谢!
【解决方案2】:

另外,标题文本是"Sign Up"。大写“U”。

该行需要是:

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

如果在此之前访问的页面是"Home",则不需要先前答案的建议来执行visit root_path

【讨论】:

  • 只是为了澄清 Marc 的陈述 --- click_link 函数实际上,你知道,导航到那个页面。 Rspec 没有测试 all页面,只是它碰巧正在访问的页面@那一刻。如果这恰好是“家”,正如 Marc 指出的那样,那么“立即注册!”链接将可用。
【解决方案3】:

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

$ rake db:test:prepare  

至少,这就是我的测试没有通过的原因。

我找到了解决方案in this forum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多