0

编辑#2

我正在为 api 编写一个快速测试套件,并且正在使用控制器规范。我正在尝试使用 post / get 调用的路由,但是否甚至咨询过这些路由,或者它只是用于 controllmer 方法的符号/字符串?


原始问题

这可能是一个非常幼稚的问题,但我在 rails 中有一条命名路线,并且正在使用 rspec 对其进行测试。在 routes.rb 中,我有:

match '/api/get-next-highest-position-in-menu-header' => 'api_edit#get_next_highest_position_in_menu_header', :as => :jt_next_highest

在我的规范中,我有以下内容:

post :jt_next_highest,  { menu_header_id: mh.id }

但我收到以下错误

1) ApiEditController Adding a Item should get the next highest position in a menu_header
 Failure/Error: post :jt_next_highest,  { menu_header_id: mh.id }
 AbstractController::ActionNotFound:
   The action 'jt_next_highest' could not be found for ApiEditController
 # ./spec/controllers/api_edit_controller_spec.rb:52:in `block (3 levels) in <top (required)>'

如果我查看 rake 路线:

Fri May 17$ rake routes | grep 'get_next_highest' 
                 jt_next_highest        /arc/v1/api/get-next-highest-position-in-menu-header(.:format)                   api_edit#get_next_highest_position_in_menu_header
Fri May 17$

我不确定这有什么问题,因为我觉得这应该可行。关于我做错了什么的任何想法?

编辑 1

试:

post :jt_next_highest_path,  { menu_header_id: mh.id }

刚得到我

   The action 'jt_next_highest_path' could not be found for ApiEditController
4

1 回答 1

1

控制器规范完全绕过路由,所以当你这样做时

post :foo

在控制器规范中,:foo必须是动作名称,即控制器中方法的名称。哪些路线映射到那并不重要(只要至少有一个)。

于 2013-05-17T19:09:25.417 回答