2012-12-18 8 views
7

Mam następującą specyfikację routingu rspec, ale muszę podać :defaults => { :format => 'json' } w poście; jak mam to zrobić?określając format domyślny w specyfikacji routingu

Spec:

it "should route to all-locations-nav" do 
    {:post => locations_nav_path }.should route_to(:controller => "api", :action => "locations_nav") 
end 

edit # 1
więc zabawy, wygląda to rozwiązuje go:

it "should route to all-locations-nav" do 
    {:post => locations_nav_path }.should route_to(:controller => "api", :action => "locations_nav", :format => "json") 
end 

ale był ciekawy, czy jest to udokumentowane w dowolnym miejscu?

Odpowiedz

4

Wystarczy ustawić format w spec tak ...

it "routes to #create" do 
    expect(:post => "/post").to route_to("posts#create", :format => :json) 
end 

obszerne wyjaśnienie ...

Zachowanie widzisz nie jest specyficzna dla :format, ale to raczej związek między symbolami widocznymi w rake routes a symbolami przekazanymi do route_to.

Na przykład, biorąc pod uwagę Twój przykład powyżej, będę oczekiwać coś jak następuje po uruchomieniu rake routes:

locations_nav POST /api/locations_nav(.:format) api#locations_nav

:controller i :action nie zostały wyraźnie zgłoszone w odpowiedzi rake routes, jak te są wbudowane w strukturę MVC Railsów, ale :format jest pokazany jawnie i przechodzi w ten sposób do :format do route_to. Na przykład ...

Podobnie, będziesz prawdopodobnie zobaczyć kilka :id odniesienia w swoim wyjściu rake routes, które byłyby wykorzystywane przez przepuszczanie parametr :id do route_to.

Kilka dodatkowych przykładów dotyczących trasowania w RSpec można znaleźć w "rspec-rails" documentation.

Wewnętrznie, RSPEC's route_to deleguje do Rails 'assert_recognizes, które można zobaczyć udokumentowane w Rails documentation.

Powiązane problemy