2013-11-13 1 views
0

Я пишу тесты с rspec для моего контроллера приложения в моем приложении rails (написано в Rails 4), и у меня возникает проблема, когда он не распознает маршрут для HTTP-запроса, который я отправляю. Я знаю, что есть способ сделать это с помощью MyApp :: Application.routes, но я не могу заставить его работать.Как создать маршрут для тестирования?

#application_controller_spec.rb 

require 'spec_helper' 


class TestController < ApplicationController 

    def index; end 

end 

describe TestController do 
    before(:each) do 
    @first_user = FactoryGirl.create(:user) 
     # this is to ensure that all before_filters are run 
    controller.stub(:first_time_user) 
    controller.stub(:current_user) 
end 

describe 'first_time_user' do 
    before(:each) do 
    controller.unstub(:first_time_user) 
    end 

    context 'is in db' do 
    before(:each) do 
     @user = FactoryGirl.create(:user) 
     controller.stub(:current_user).and_return(@user) 
    end 

    it 'should not redirect' do 
     get :index 
     response.should_not be_redirect 
    end 
    end 

    context 'is not in db' do 

    context 'session[:cas_user] does not exist' do 
     it 'should return nil' do 
     get :index 
     expect(assigns(:current_user)).to eq(nil) 
     end 
    end 

    it "should redirect_to new_user_path" do 
     controller.stub(:current_user, redirect: true).and_return(nil) 
     get :index 
     response.should be_redirect 
    end 
    end 
end 

Ошибка я получаю прямо сейчас

No route matches {:action=>"index", :controller=>"test"} 

Я хотел бы добавить тест # индексный путь к конфигурации/routes.rb, но не распознает контроллер испытания, так что я хочу сделать что-то вроде

MyApp::Application.routes.append do 
    controller :test do 
    get 'test/index' => :index 
    end 
end 

, но я не уверен, где добавить это, или если это даже работает в RSpec. Любая помощь будет замечательной!

+0

Как вы имели в виду: «Я бы добавил маршрут указателя теста к config/routes.rb, но он не распознает контрольный контроллер»? Добавьте маршрут в route.rb и выполните «рейк-маршруты» с терминала и проверьте выход. Может быть проблема с сингулярным/множественным числом и генерация имени контроллера. –

+0

Извините, это было неясно - когда я рейка маршрутов, он бросает «rake aborted! Missing: controller» Проблема заключается в том, что Test Controller существует только в файле «application_controller_spec.rb» – GoodLuckGanesh

ответ

0

Если вы пытаетесь протестировать свой ApplicationController, см. Об этом RSpec documentation. Вам нужно будет определить методы, такие как index внутри теста, но он работает хорошо.