如何测试自定义路由[ActionController :: RoutingError:]

时间:2014-07-03 18:52:19

标签: ruby-on-rails testing rspec controller

测试输出:

Failures:

  1) AccountsController account signs up  
     Failure/Error: post :create, account_id: account.id
     ActionController::RoutingError:
       No route matches {:account_id=>"1", :controller=>"accounts", :action=>"create"}
     # ./spec/controllers/accounts_controller_spec.rb:24:in `block (4 levels) in <top (required)>'

routes.rb中:

post 'sign_up', to: 'accounts#create'

规格:

RSpec.describe AccountsController, type: :controller do
...
it '' do
  post :create, account_id: account.id
  ...
end

我有一个指向我的create方法的自定义路由。我不想在路上。我有一个有效的路线测试。现在我想测试create方法中的逻辑。

如何使用自定义路线测试create方法?

我尝试过做post 'my_custom_route',但是没有用。

Rails:3.2

Rspec:3

编辑:我刚用account.id作为示例。它不是我实际代码中的真实参数。

2 个答案:

答案 0 :(得分:0)

您应该使用:id,而不是:account_id

post :create, id: account.id

答案 1 :(得分:0)

  

如何使用自定义路径测试create方法?

你不能,至少不能在控制器规范中。

控制器的单元测试旨在测试动作的主体,而不是路线。因此,您始终需要指定操作 - 在这种情况下,调度程序不会为您解析路径。

您可以编写routing spec来验证自定义路由是否按预期工作。或者,您可以编写一个匹配所需网址的feature spec