6

我关注 Rails 教程,但在图 3.6之前的第 3.2.1 节有问题。跑步时

$ bundle exec rspec spec/requests/static_pages_spec.rb

我失败了

Failures:
  1) StaticPages GET /static_pages works! (now write some real specs)
     Failure/Error: get static_pages_index_path
     NameError:
       undefined local variable or method `static_pages_index_path' for # <RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fe7592b33b8>
     # ./spec/requests/static_pages_spec.rb:7:in `block (3 levels) in <top (required)>'    
Finished in 0.00454 seconds
1 example, 1 failure
Failed examples:
rspec ./spec/requests/static_pages_spec.rb:5 # StaticPages GET /static_pages works! (now write some real specs)

这是文件:

规范/请求/static_pages_spec.rb

require 'spec_helper'
describe "Static pages" do
  describe "Home page" do
    it "should have the content 'Sample App'" do
      visit '/static_pages/home'
      page.should have_content('Sample App')
    end
  end
end

应用程序/控制器/static_pages_controller.rb

class StaticPagesController < ApplicationController
  def home
  end
  def help
  end
end

app/views/static_pages/home.html.erb

<h1>Sample App</h1>
<p>
  This is the home page for the
  <a href="http://railstutorial.org/">Ruby on Rails Tutorial</a>
  sample application.
</p>

配置/路由.rb

SecondApp::Application.routes.draw do
  get "static_pages/home"
  get "static_pages/help"
end

宝石文件

source 'https://rubygems.org'
gem 'rails', '3.2.3'
group :development do
  gem 'sqlite3', '1.3.5'
  gem 'rspec-rails', '2.9.0'
  gem 'guard-rspec', '0.5.5'
end
group :assets do
  gem 'sass-rails',   '3.2.4'
  gem 'coffee-rails', '3.2.2'
  gem 'uglifier', '1.2.3'
end
gem 'jquery-rails', '2.0.0'
group :test do
  gem 'rspec-rails', '2.9.0'
  gem 'capybara', '1.1.2'
  gem 'growl', '1.0.3'
end
group :production do
  gem 'pg', '0.12.2'
end

知道我做错了什么吗?

4

8 回答 8

4

我也遇到了这个问题;本教程似乎错过了一步。

static_pages_spec.rb,行:

get static_pages_index_path

...应改为:

get static_pages_home_path

这是因为 中没有index方法static_pages_controller.rbindex而是home称为.

但是,我查看了您的代码,您的static_pages_spec.rb文件似乎与教程不匹配,但我猜您是从其他地方复制代码?除了在您的控制台错误文本中,我看不到static_pages_index_path任何地方,这似乎很奇怪。

这是我static_pages_spec.rb的全部内容(在这个阶段),它通过了测试:

require 'spec_helper'

describe "StaticPages" do
  describe "GET /static_pages" do
    it "works! (now write some real specs)" do
      # Run the generator again with the --webrat flag if you want to use webrat methods/matchers
      get static_pages_home_path
      response.status.should be(200)
    end
  end
end

在此之后,教程(在清单 3.12中)取代了这一步,static_pages_spec.rb完全改变了,尽管忘记明确推荐改变。这使我上面的代码无关紧要,但希望它可以解释您的错误。

于 2013-09-24T11:38:17.807 回答
1

我遇到了同样的问题,我通过以下方式解决了这个问题。我也是一个新手(第一个 Stack Overflow 帖子......紧张),所以我没有行话:

我收到这个错误的原因是我没有创建教程清单 3.4 中描述的 staticpages 控制器(我想我删除它时弄乱了清单 3.4 中教你如何操作、删除东西的练习命令)。检查您是否没有 staticpages 控制器的方法是:

sample_app/controllers/ 所以我那里只有 application_controller.rb 文件,没有static_pages_controller.rb.

所以你必须运行rails generate controller StaticPages home help --no-test-framework 命令并将控制器放在那里。

你可以去仔细检查你的工作,localhost:3000/static_pages/home看看那里是否真的有东西。

然后根据教程编辑home.html.erb文件并检查static_pages/home它是否真的显示“示例应用程序”。

如果static_pages/home真的说“Sample App”,而你运行它时测试仍然失败,那么只有上帝才能帮助你。或者也许是 Stack Overflow 上的其他人。祝你好运。

于 2012-05-20T17:46:22.317 回答
1

仔细看看你的spec/requests/static_pages_spec.rb. 请确保您已删除get static_pages_index_path行。

于 2013-01-02T12:03:39.973 回答
1

您必须以与 home.html.erb 相同的方式更新您的 app/views/static_pages/help.html.erb 页面以包含“示例应用程序”。

于 2013-01-16T22:01:54.653 回答
0

我面临着类似的问题。当你编辑 时static_pages_spec.rb,看起来你输入了这个命令(在清单 3.9 中)

<editor name> static_pages_spec.rb

而你必须输入

<editor name> spec/requests/static_pages_spec.rb

这肯定会解决你的问题。

于 2012-06-05T00:29:06.757 回答
0

当您将“config.include Capybara::DSL”添加到 RSpec 帮助文件的底部时,在此之前的部分中,您可能忘记了保存页面。这是通过同时按下 Command + S 键来完成的。有时,如果某些东西第一次没有按照您期望的方式工作,那么重新启动您的 Rails 服务器也是一个好主意。

于 2013-09-27T23:28:14.457 回答
0

您是否删除了 public/index.html?这可能会导致问题。

于 2012-05-20T18:06:55.753 回答
0

问题是您正在尝试运行尚未实际工作的生成规范。本教程告诉您用以下内容替换该规范的主体:

it "should have the content 'Sample App'" do
  visit '/static_pages/home'
  page.should have_content('Sample App')
end

请注意,它说的是“访问”,而不是“获取”,等等......

发生这种情况是因为规范生成器 ( rails generate integration_test static_pages) 假定存在一个有效的 RESTful 资源,其中包含许多命名路由,包括_index_path,但本教程中的此控制器并非如此。

于 2013-10-24T22:50:00.643 回答