为什么我的Rails控制器测试没有路由?

时间:2014-01-18 07:51:37

标签: ruby-on-rails ruby unit-testing ruby-on-rails-4

为什么我的测试用例不起作用?为什么它会抱怨找不到路由?它适用于浏览器。

代码

class UsersController < ApplicationController
  def deposit

路线

resources :users do
  post 'deposit', to: :deposit

测试用例

class UsersControllerTest < ActionController::TestCase
  test "deposit" do
    post :deposit, {id: 1} 

日志

  

的UsersControllerTest#test_deposit:   ActionController :: UrlGenerationError:没有路由匹配{:id =&gt;“1”,:controller =&gt;“users”,:action =&gt;“deposit”}

版本

Rails 4.0.0

Realated

我看到了这个,但是当我使用'1'时它没有用。 Rails routes issue with controller testing

我看到了这个,但我已经添加了:id,它仍然无效。 Testing Rails 4 Controller

2 个答案:

答案 0 :(得分:3)

原因是您的路线定义不那么标准。

添加RESTful操作的更好方法是使用member

resources :users do
  member do
    post 'deposit'
  end
end

resources :users do
  post 'deposit', on: :member
end

这就是为什么你只能使用user_id而不是id

的原因
  

你可以省略:on选项,这将创建相同的成员路由,除了资源id值将在params [:photo_id]而不是params [:id]中可用。 http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

答案 1 :(得分:0)

{user_id: 1}

的工作。这是一条耙路:

  

user_deposit POST /users/:user_id/deposit(.:format)

虽然这是另一个:

  

edit_user GET /users/:id/edit(.:format)