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

tim*_*one 7 rspec ruby-on-rails

我有以下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
Run Code Online (Sandbox Code Playgroud)

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

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

但如果在任何地方记录这一点,我很好奇吗?

Dre*_*awn 6

只需像这样在规范中设置格式...

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

长解释...

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

例如,鉴于您上面的示例,我希望在您运行时会出现以下内容rake routes

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

:controller:action没有被明确标记在rake routes响应,如那些被内置到Rails的MVC结构,但是:format明确地示出,并传递:formatroute_to抽头到这一点。例如 ...

同样,您可能会:idrake routes输出中看到一些引用,通过将:id参数传递给route_to.

“rspec-rails”文档中可以看到一些关于 RSpec 中路由的其他示例。

在内部,RSpec 的route_to委托给 Rails' assert_recognizes,您可以在Rails 文档 中看到记录