我有以下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
但是如果在任何地方记录这一点很奇怪吗?
答案 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中看到这些代表。