我的测验控制器功能测试内部:
post :statements
退货 - >
ActionController::RoutingError: No route matches {:controller=>"quizzes", :action=>"statements"}
但是我的路线如此倾斜:
quizzes_statements /quizzes/statements(.:format) quizzes#statements {:any=>[:OPTIONS, :POST]}
我的routes.rb看起来像这样:
match '/quizzes/statements' => 'quizzes#statements', any: [:OPTIONS, :POST]
如果我在我的测试中运行它:
extend Rails.application.routes.url_helpers
quizzes_statements_path
返回:
=> "/quizzes/statements"
但如果我这样做:
post quizzes_statements_path
我得到同样的错误:
ActionController::RoutingError: No route matches {:controller=>"quizzes", :action=>"/quizzes/statements"}
任何人都知道这里会发生什么?
答案 0 :(得分:1)
使用此:
match '/quizzes/statements' => 'quizzes#statements', via: [:options, :post]
答案 1 :(得分:0)
在控制器(功能)测试中,您只能到达此控制器内的操作,用符号表示。
e.g。
post :statements
get :index
注意get
,功能测试中的post
与集成测试中的方法完全不同,尽管它们具有相同的名称。您可以在集成测试中使用命名路径而没有任何问题。 e.g。
post statement_path
所以修复是,在功能测试中不要使用命名路径。直接获取/发布行动。