2012-02-28 4 views
24

私はレールに非常に新たなんだ、とrailstutorialに従うことをしようとしています。すべては名前のルート(5.3.3)RSPECと命名ルートが

を乗り越えることができない私のテストを除いて、細かい行く私のroutes.rbを:

SampleApp::Application.routes.draw do 

resources :users 
match '/signup', to: 'users#new' 

match '/help', to: 'static_pages#help' 
match '/about', to: 'static_pages#about' 
match '/contact', to: 'pages#contact' 

root to: 'static_pages#home' 

#Commented stuff 

私の初テスト(スペック/コントローラ/ static_pages_controller_spec。 RB):

describe "Static pages" do 

subject { page } 

shared_examples_for "all static pages" do 
    it { should have_selector('h1', text: heading) } 
    it { should have_selector('title', text: full_title(page_title)) } 
end 

describe "Home page" do 
    before { visit root_path } 
    let(:heading) { 'Sample App' } 
    let(:page_title) { 'Home' } 

    it_should_behave_like "all static pages" 
end 

#Other tests 

spec_helper.rbはすべてコメントしものなし(ように見える)

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = true 
    config.infer_base_class_for_anonymous_controllers = false 
end 

私はRSpecのから取得するエラーはすべて、この1のようなものです:

Static pages Home page it should behave like all static pages 
Failure/Error: before { visit root_path } 
NameError: 
    undefined local variable or method `root_path' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1::Nested_1:0x00000004a12210> 
Shared Example Group: "all static pages" called from ./spec/controllers/static_pages_controller_spec.rb:17 
# ./spec/controllers/static_pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>' 

私はすでにspec_helperで

include Rails.application.routes.url_helpers 

を使用してみましたが、それは

Static pages Home page it should behave like all static pages 
Failure/Error: Unable to find matching line from backtrace 
SystemStackError: 
    stack level too deep 
# /usr/lib/ruby/1.9.1/forwardable.rb:185 

に自分の誤りを変更しました私は私のルートの名前を変更する別の方法を試みましたが、それらのどれも働いていませんでした。私はチュートリアルのバージョンに戻ります。

それがまさに問題が何であるかを見つけるの任意の助けになることができれば、私はレール3.2.1とルビー1.9.2p290では、Ubuntu 11.10上です。私は解決策をグーグルでかなり長い間を費やし、あらゆる^^」私はあなたのRSpecのコントローラの仕様の内部という名前のルートへのアクセスを持っていないと思います

答えて

101

名前付きルートが動作するはず?

+0

「設定」を除いて、まさに私がやったことです。部。すべてが今完璧に動作します!どうもありがとう ! – FabPelletier

+7

誰かがこれを遠くにして困惑している場合、root_path(etc)はRSpecテストの "記述"ブロック内の "it"セクションの "do ... end"ブロック内でしか動作しないことにも注意してください。したがって、関数に渡されたパス・パラメーターに基づいて "it"セクションを処理する関数を作成した場合は、その関数にroot_path(etc)をパラメーターとして渡すことはできません。 – DreadPirateShawn

+0

これはまた、Rails 4.2 deprecastion警告の 'DEPRECATION WARNING:named_routes.helpersが推奨されなくなりました。route_defined?(route_name)を使用して名前付きルートが定義されているかどうかを確認してください。' httpsを待つまで、 ://github.com/rspec/rspec-rails/pull/1142がリリースされました。 –

2

を見つけられませんでした、あなたは助けることができると思います。しかし、あなたはroot_pathに相当する訪問( '/')だけでよいでしょう。

RSpec.configure do |config| 
    config.include Rails.application.routes.url_helpers 
    ... 
end 

がどのようにあなたがそれを設定することです:あなたはrspec_helper.rbで次置けば

+0

おかげで、それがうまく機能し、私のテストが緑行かせます!しかし、このチュートリアルでは、名前付きルート[railstutorial.org](http://ruby.railstutorial.org/chapters/filling-in-the-layout?version=3.2#code:static_pages_spec_shared_example)を使用しているようですが、私は知りたいのですどうすればいいですか^^ – FabPelletier

+0

あなたの歓迎はちょうどupvoteし、答えを受け入れてください! :) – TheDelChop

+0

Upvoteは15の評判を必要とします、申し訳ありません!誰かが実際にその本のように動作させる方法を知っている場合には、私はそれを受け入れる前にちょっと待つでしょう:) – FabPelletier

2

あなたは

rails generate rspec:install 

代わりの

rspec --init 

を使用している必要がありますし、設定ファイルを変更しなければならなかったではないでしょう。

はかかわらず、今それをしないでくださいまたはアプリケーションが解除されますと、あなたはそれを破った理由を考え出すいくつかのより多くの時間を無駄にする必要があります。

+7

あなたのコメントは本当に解決策ではありません。 ;-) – Tass

2

私は同じチュートリアルで、同じ問題を抱えていました。私はSporkサービスを再起動する必要があり、すべて正常に機能していたことが判明しました。

トム・Lによって掲示ソリューションは、私のために働いたが、私はその行を削除しても問題が修正されている、先割れスプーンを再起動したとき。チュートリアルのコードを逸脱について警戒している他の人々を助け

願っています!

+1

ありがとう! @トムLのコードは私のために働かなかった。それでは、スポークのせいだ!私は一晩中、解決策を探して過ごしました!どうもありがとうございました! –

3

Googleが100%に収まらない、ここにも、私のエラーメッセージを私にもたらしました。カピバラ2.0つspec/featuresカピバラコマンドはもうフォルダspec/requestsでは動作しないフォルダを使用する必要があるため

NoMethodError: 
     undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xa49a73c> 

:私の場合カピバラコマンドvisit

は不明...

エラーです。私を助けてくれ

http://alindeman.github.com/2012/11/11/rspec-rails-and-capybara-2.0-what-you-need-to-know.html

は、あなたがこの便利を見つけることを願っています。 rspec_helper.rbで

4

RSpec.configure do |config| 
    config.include Rails.application.routes.url_helpers 
    ... 
end