Ich habe es mit einem scheinbar seltsamen Problem zu tun, während ich versucht habe Unit Tests auf einem verschachtelten resources
Controller auszuführen. Hier ist mein Setup:RSpec kann keine Route für verschachtelte Ressourcen finden
routes.rb
:
Rails.application.routes.draw do
scope module: 'api' do
namespace :v1 do
resources :users do
resources 'item-configurations',
controller: :item_configuration,
as: :item_configurations,
on: :member
end
end
end
end
app/controllers/api/v1/item_configurations_controller.rb
:
module Api::V1
class ItemConfigurationsController < ApplicationController
def show
@user = authorize User.find(params[:user_id])
@item_configuration = authorize @user.item_configurations.find(params[:id])
success @item_configuration
end
end
end
und schließlich spec/controllers/api/v1/item_configurations_controller_spec.rb
:
require 'rails_helper'
describe Api::V1::ItemConfigurationsController do
describe '#show' do
it 'renders an item configuration' do
user = FactoryGirl.create(:user)
configuration = FactoryGirl.create(:item_configuration)
get :show, params: {user_id: user.id, id: configuration.id}
expect(response.status).to equal(200)
end
end
end
Wenn ich eine Anfrage an /users/1/item-configurations/4
mache ich bin in der Lage zu bekomme eine Antwort, genau wie ich es erwarte. Das Problem kommt aus, wenn ich rspec
laufen, ich folgende Fehlermeldung erhalten:
1) Api::V1::ItemConfigurationsController#show renders an item configuration
Failure/Error: get :show, params: {user_id: user.id, id: configuration.id}
ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"api/v1/item_configurations", :id=>1, :user_id=>1}
Normalerweise treten diese Fehler, wenn ein Parameter aus der Anfrage nicht vorhanden, aber in diesem Fall scheint alles, was es zu sein (beide user_id
und id
) . Ich habe auch das auf anderen Routen auf dem Controller versucht (#index
funktioniert auch, wenn eine GET
gesendet, aber funktioniert nicht in Rspec), Hinzufügen eines format: :json
Param, etc., aber nichts scheint es zu lösen.
Bin ich verrückt oder gibt es etwas einfaches hier fehlt mir?
Für mich sieht es ähnlich wie [das] (https://github.com/ rspec/rspec-rails/issues/1586) Problem. Ich weiß nicht, ob es hilft oder nicht. Ich würde auch versuchen, 'Rails.application.routes.draw' in' Yourappname :: Application.routes.draw' umzubenennen. – mutantkeyboard
Fehle ich etwas oder ist rspec in der Fehlerausgabe auf 'TrayConfigurationsController' zurückzuführen, aber du beschreibst' ItemConfigurationsController' . Irgendwas seltsam in 'log/test.log'? – Anthony
hoppla, das ist ein Fehler. Ich habe einige Modelle für diese Frage umbenannt, um sie allgemeiner zu machen. Ich habe das in der letzten Bearbeitung behoben. –