2010-11-30 6 views
1

benötigt Ich versuche, etwas ähnliches zu http://relishapp.com/rspec/rspec-rails/v/2-2/dir/routing-specs/access-to-named-routes-in-routing-specsRSpec enthält Hilfe

Ich habe einen Komponententest Gang zu imitieren:

require 'test_helper' 

    class RoutesTest < ActionController::TestCase 
     test "book name is sent to store#index' do 
     assert_routing 'book/mytitle', {:controller => 'book', :action => 'index', :title => 'mytitle'} 
     end  
    end 

Ich versuche, dies zu einem RSpec Test verdeckte (Lauf Rspec 2.2 unter Rails3.0.3)

Hier ist der Test:

require 'spec_helper' 
    include RSpec::Rails::Matchers::RoutingMatchers 
    include ActionDispatch::Assertions::RoutingAssertions 

    describe "book specific routes" do 
     it "should recognize title in path" do 
     {:get => "book/mytitle"}.should route_to(:controller => "book", :action => "index", :title => "mytitle") 
     end 
    end 

Aber dies führt zu:

Failures: 

    1) book specific routes should recognize title in path 
    Failure/Error: {:get => "book/mytitle"}.should route_to(:controller => "book", :action => "index", :title => "mytitle") 
    undefined method `recognize_path' for nil:NilClass 
    # ./spec/route_spec.rb:9:in `block (2 levels) in <top (required)>' 

Irgendeine Idee, woher die nilClass kommt? Jede Hilfe wäre willkommen.

Antwort

2

Es ist die doppelte umfassen von ActionDispatch::Assertions::RoutingAssertions, die den Fehler verursacht - nicht sicher, warum. Entfernen Sie die zwei include Aussagen und alles sollte gut sein. Die Spezifikationsdatei sollte in /spec/routing leben. Sie können das Beispiel mit describe BooksController für Stilpunkte umschließen, aber es funktioniert ohne es.

1

Ich schätze, die Matcher müssen in einer Controller-Spezifikation verwendet werden. Sie sollten bereits vorhanden sein, so dass sie nicht manuell hinzugefügt werden müssen. Stellen Sie nur sicher, dass Sie einen Controller beschreiben.

describe BooksController do 
    it "should recognize title in path" do 
    # ... 
    end 
end