/ / W jaki sposób mogę sterować specyfikacją kontrolera dla nowej metody zagnieżdżonej trasy? - ruby-on-rails, ruby, rspec, ruby-on-rails-3.2

Jak mogę sterować specyfikacją kontrolera dla nowej metody zagnieżdżonej trasy? - ruby-on-rails, ruby, rspec, ruby-on-rails-3.2

Mam dość prostą konfigurację trasy:

  resources :users, only: [:show] do
resources :account_groups

Który generuje te trasy:

$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

Problem pojawia się, gdy próbuję napisać specyfikację controller#new:

describe "#new" do
it "responds 200" do
get :new
response.status.should eq 200
end
end

Nie powiedzie się, ponieważ trasa musi być określona przez użytkownika :user_id:

1) Api::AccountGroupsController#new responds 200
Failure/Error: get :new
ActionController::RoutingError:
No route matches {:controller=>"api/account_groups", :action=>"new"}

Ale kiedy określę :user_id:

describe "#new" do
it "responds 200" do
get :new, {user_id: user.id}
response.status.should eq 200
end
end

Narzeka, że ​​dodałem nieoczekiwany argument:

1) Api::AccountGroupsController#new responds 200
Failure/Error: get :new, {user_id: user.id}
ArgumentError:
wrong number of arguments (1 for 0)

Masz pomysł, jak to działa? Dzięki!

Odpowiedzi:

0 dla odpowiedzi № 1

Nazwa twojej klasy testowej powinna być:

Api::Users::AccountGroupsControllerTest