【发布时间】:2014-08-01 15:48:49
【问题描述】:
我有一个相当简单的路线设置:
resources :users, only: [:show] do
resources :account_groups
生成这些路由:
$rake routes CONTROLLER=api/account_groups
api_user_account_groups GET /api/users/:user_id/account_groups(.:format) api/account_groups#index
POST /api/users/:user_id/account_groups(.:format) api/account_groups#create
new_api_user_account_group GET /api/users/:user_id/account_groups/new(.:format) api/account_groups#new
edit_api_user_account_group GET /api/users/:user_id/account_groups/:id/edit(.:format) api/account_groups#edit
api_user_account_group GET /api/users/:user_id/account_groups/:id(.:format) api/account_groups#show
PUT /api/users/:user_id/account_groups/:id(.:format) api/account_groups#update
DELETE /api/users/:user_id/account_groups/:id(.:format) api/account_groups#destroy
当我尝试为controller#new 编写规范时,问题就来了:
describe '#new' do
it 'responds 200' do
get :new
response.status.should eq 200
end
end
失败是因为路由需要你指定:user_id:
1) Api::AccountGroupsController#new responds 200
Failure/Error: get :new
ActionController::RoutingError:
No route matches {:controller=>"api/account_groups", :action=>"new"}
但是,当我指定 :user_id:
describe '#new' do
it 'responds 200' do
get :new, {user_id: user.id}
response.status.should eq 200
end
end
它抱怨我添加了一个意外的参数:
1) Api::AccountGroupsController#new responds 200
Failure/Error: get :new, {user_id: user.id}
ArgumentError:
wrong number of arguments (1 for 0)
知道如何进行这项工作吗?谢谢!
【问题讨论】:
-
您的规范中在哪里定义了
user? -
user在顶层定义,因为它被所有规范共享。如果user未定义,您将得到NameError而不是ArgumentError。 -
我想知道它是如何定义的,而不是在哪里定义的。 :) 你有没有得到任何堆栈跟踪?
-
你的测试班叫什么名字?
-
class Api::AccountGroupsController和describe Api::AccountGroupsController do
标签: ruby-on-rails ruby rspec ruby-on-rails-3.2