【问题标题】:Michael Hartl's rails tutorial chapter 3, Error in rspec whenMichael Hartl 的 rails 教程第 3 章,rspec 中的错误时
【发布时间】:2014-05-21 18:39:25
【问题描述】:

我是 Ruby on rails 的新手。目前使用 maverick 的 10.9.3,Rails 4。当我尝试运行 rspec 命令时出现以下错误。

这是我得到的错误:

rspec ./spec/controllers/pages_controller_spec.rb:35 # PagesController GET 'about' should have the right title
rspec ./spec/controllers/pages_controller_spec.rb:24 # PagesController GET 'contact' should have the right title
rspec ./spec/controllers/pages_controller_spec.rb:11 # PagesController GET 'home' should have the right title

我的 Gemfile 包括:

group :development, :test do
  gem 'rspec-rails', '2.14.2'
end

group :test do
  gem 'rspec', '2.14.1'
  gem 'spork', '0.9.0.rc'
end

也是我的 pages_controller_spec.rb

require 'spec_helper'

describe PagesController do
  render_views

  describe "GET 'home'" do
    it "returns http success" do
      get 'home'
      response.should be_success
    end
    it "should have the right title" do
      get 'home'
      response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | Home")
    end
  end

  describe "GET 'contact'" do
    it "returns http success" do
      get 'contact'
      response.should be_success
    end


    it "should have the right title" do
      get 'contact'
      response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | Contact")
    end
  end
  describe "GET 'about'" do
    it "returns http success" do
      get 'about'
      response.should be_success
    end

    it "should have the right title" do
      get 'about'
      response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | About")
    end
  end
end

来自以下评论的控制器代码:

class PagesController < ApplicationController
  def home
  end

  def contact
  end

  def about
  end
end

【问题讨论】:

  • Michael 的教程是有史以来最有效的 :) 无论如何.. 我发现另外一件非常有用的事情是 gem launchy。得到它,你可以在visit之后调用save_and_open_page来查看页面的样子。
  • 实际控制器代码如下: class PagesController
  • Ruby On rails Tutorial sample App |关于

    关于

    这是主页Ruby on rails教程示例应用。

  • 请使用控制器代码编辑问题,使其更具可读性。

标签: ruby-on-rails ruby rspec


【解决方案1】:

您是否尝试过检查文档: https://relishapp.com/rspec

【讨论】:

  • 我阅读了文档并运行了 gem install rspec-rails,使用 bundle install 安装了 gems 并按照说明进行操作,但它仍然无法正常工作。
【解决方案2】:

是否像 about 和 About 的小写“a”一样简单?

您的测试正在寻找字符串“Ruby on Rails Tutorial Sample App | About”,而代码正在生成“Ruby on Rails Tutorial Sample App | about”。据我所知,rspec 区分大小写。

我看到的另一件事是必须将 :visible 设置为 false 以测试标题。

【讨论】:

  • 修复了这个问题,我仍然收到以下关于家庭、联系人和关于的错误。 rspec ./spec/controllers/pages_controller_spec.rb:11 # PagesController GET 'home' 应该有正确的标题
  • 你修好了哪个?案例或:可见
  • 我修复了内容中区分大小写的字符串。我不明白我应该为 :visible = false 测试标题做什么。
  • 尝试在您尝试匹配的字符串后添加 ", :visible => false"。
  • @SinaR。它能为您提供帮助吗?如果没有,你能分享一个 git repo 以便我们查看代码吗?
【解决方案3】:

你也可能遇到这个错误 Ruby on Rail Michael Hartl's Chapter 3 Error。 Rails 的内置测试套件(在撰写本文时为 'rails-controller-testing' - '1.0.2'、'minitest' - '5.10.3'、 'minitest-reporters' - '1.1.14')

我建议您在阅读 Michael Hartl 的书学习 Rails 时遵循他的 Gemfiles。

provide 将标记块存储在标识符中以供以后使用。在这种情况下,符号 :title 中的“帮助”。提供包含在&lt;% %&gt; 中,表示它正在执行此代码,而不是在视图中打印出来。

yield 在这种情况下只是将那个块吐出来。产量包含在&lt;%= %&gt; 中,表示它正在打印到视图中。

把它想象成设置一个变量并打印出一个变量。

请参阅:http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-provide 了解更多信息。请注意,provide 实际上是 content_for 的包装器,因此该链接中的好东西就在这里。

这摘自这篇 StackOverflow 文章:yield and provide() inside template

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多