Rspec testing in rails3

Hi,

I have a Queues controller and and QueueItems controller in my rails application. In routes I have defined as below `match 'queues/:queue_id/next', :to=> 'queueitems#next'` In my QueueItems Controller I have a next action and it assigns an instance variable.

    def next     @queue = "Regular"     #other stuffs related to regular     end

How do I test this in Rspec. I am pretty very new to Rspec. Please help. I tried like the below

    describe "next " do       it "routes /queues/:queue_id/next" do         { :get => "/queues/regular_queue/next" }.should route_to(           :controller => "queue_items",           :action => "next",           :queue_id => "regular_queue",           :format => "json"             )         assigns(:queue).should_not be_nil         expect(response).to be_success       end

But it is not at all coming inside my next action in controller.

What you’ve written there is a routing spec - it’s just testing that your routes file maps that path to the correct controller/action. It’s not making a request at all. For that you want a controller spec (these should be in spec/controllers/ for rspec to detect this as a controller spec. You’d want something along these lines

describe QueueItemsController do

describe ‘GET next’ do

it ‘should assign queue’ do

get :next

assigns(:queue).should == ‘Regular’

end

end

end

Fred

Frederick Cheung wrote in post #1144184:

          :format => "json"             )         assigns(:queue).should_not be_nil         expect(response).to be_success       end

But it is not at all coming inside my next action in controller.

What you've written there is a routing spec - it's just testing that your routes file maps that path to the correct controller/action. It's not making a request at all. For that you want a controller spec (these should be in spec/controllers/ for rspec to detect this as a controller spec. You'd want something along these lines

describe QueueItemsController do   describe 'GET next' do     it 'should assign queue' do       get :next       assigns(:queue).should == 'Regular'     end   end end

Fred

Hi Fred,

I tried the above code by putting it in the spec/controllers/queue_items_constroller_spec.rb file But it shows the routing error as Failure/Error: get :next      ActionController::RoutingError:        No route matches {:controller=>"queue_items", :action=>"next"} In the routes file I have defined as   match '/queues/:queue_id/next', :to => 'queue_items#next', :format=>'json'