7

我有以下 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

但很好奇这是否记录在任何地方?

4

1 回答 1

6

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

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,因为它们内置在 Rails 的 MVC 结构中,但是显式显示了,并将to传递给它。例如 ...:actionrake routes:format:formatroute_to

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

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

在内部,RSpecroute_to对 Rails 的委托assert_recognizes,您可以在Rails 文档中看到记录。

于 2013-10-09T04:30:17.183 回答