2015-12-13 5 views
0

тест не срабатывает, потому что он говорит, что действия не существуют, когда это ясно. Это потому, что это вложенный маршрут? Есть предположения?Контроллер контроллера Rspec не найден

Update:

я переехал resources :orders вне вложенного маршрута и испытаний прошли. Так что это связано с тем, что он вложен.

OrderController

def index 
    if current_printer 
     @orders = Order.all 
     @printer = Printer.find(params[:printer_id]) 
    end 
    if current_user 
     @orders = Order.where(user_id: params[:user_id]) 
    end 
end 

OrdersController Spec

require 'rails_helper' 

RSpec.describe OrdersController, :type => :controller do 
    describe "unauthorized user" do 
    before :each do 
     # This simulates an anonymous user 
     login_with_user nil 
     binding.pry 
    end 

    it "should be redirected back to new user session" do 
     get :index 
     expect(response).to redirect_to(new_user_session_path) 
    end 
    end 
end 

Маршруты

resources :users, only: [:index, :show] do 
     resources :orders 
end 

Ошибка

Failures: 

    1) OrdersController unauthorized user should be redirected back to new user session 
    Failure/Error: get :index 

    ActionController::UrlGenerationError: 
     No route matches {:action=>"index", :controller=>"orders"} 
+0

ли вы назвать это 'OrderController' или' OrdersController'? По соглашению он должен быть множественным. – SteveTurczyn

+0

Нет, это как-то связано с тем, что он вложен – Seal

ответ

1

При тестировании контроллеров, имеющих вложенные маршруты, вы должны передать хэш параметров URL.

к примеру моих маршрутов выглядел как этот

user_orders GET /users/:user_id/orders(.:format) orders#index

так в моем тесте я прошел в хэш с user_id

get :index, { user_id: 1 }

тесты прохождения :)

Смежные вопросы