为什么我的测试用例不起作用?为什么它会抱怨找不到路由?它适用于浏览器。
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
我看到了这个,但是当我使用'1'时它没有用。 Rails routes issue with controller testing
我看到了这个,但我已经添加了:id,它仍然无效。 Testing Rails 4 Controller
答案 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)