由于某种原因,命名路由在功能测试中不起作用

时间:2014-04-03 15:43:18

标签: ruby-on-rails routes functional-testing

我的测验控制器功能测试内部:

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"}

任何人都知道这里会发生什么?

2 个答案:

答案 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

所以修复是,在功能测试中不要使用命名路径。直接获取/发布行动。