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

アプリ/ビュー/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>

config/routes.rb

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

Gemfile

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.rbです。はindex代わりに と呼ばれ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

home.html.erbで行ったのと同じ方法で、app / views / static_pages/help.html.erbページを更新して「サンプルアプリ」を含める必要があります。

于 2013-01-16T22:01:54.653 に答える
1

私は同じ問題を抱えていて、次の方法でそれを理解しました。私は初心者でもあります (最初のスタック オーバーフローの投稿...神経質です)。

このエラーが発生した理由は、チュートリアルのリスト 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されていて、テストを実行してもまだ失敗する場合は、神だけがあなたを助けることができます. または、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 に答える
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

問題は、実際にはまだ機能しない生成された仕様を実行しようとしていることです。チュートリアルでは、その仕様の本文を次のように置き換えるように指示されています。

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 に答える
0

public/index.html を削除しましたか? これが問題を引き起こしている可能性があります。

于 2012-05-20T18:06:55.753 に答える