在路由规范中指定默认格式

时间:2012-12-18 02:50:42

标签: ruby-on-rails rspec

我有以下rspec路由规范,但我需要在帖子中指定:defaults => { :format => 'json' };我该怎么做?

规格:

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

编辑#1
所以玩,看起来像这样修复它:

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

但是如果在任何地方记录这一点很奇怪吗?

1 个答案:

答案 0 :(得分:4)

只需在规范中设置格式......

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

冗长的解释......

您所看到的行为并非特定于:format,而是您在rake routes中看到的符号与传递给route_to的符号之间的关系。

例如,根据上面的示例,当您运行rake routes时,我会发现以下内容:

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

:controller:action未在rake routes响应中明确标记,因为这些内置于Rails的MVC结构中,但:format显式显示,并将:format传递给route_to点击。例如......

同样,您可能会在:id输出中看到一些rake routes引用,这些引用可以通过将:id参数传递给route_to来实现。

"rspec-rails" documentation中可以看到有关RSpec中路由的一些其他示例。

在内部,RSpec的route_to委托给Rails'assert_recognizes,您可以在Rails documentation中看到这些代表。