在rails3中进行Rspec测试

时间:2014-04-26 15:02:25

标签: ruby-on-rails-3 rspec2

我的导轨中有一个Queues控制器和QueueItems控制器 应用。在我定义的路线如下 match 'queues/:queue_id/next', :to=> 'queueitems#next' 在我的QueueItems控制器中,我有一个下一个动作,它分配一个 实例变量。

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

如何在Rspec中测试它。我对Rspec来说非常新。请帮忙。 我尝试过以下

describe QueuesController do
    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
end

但它完全没有进入我在控制器中的下一个动作。

更新#2 规格/控制器/ queue_items_controller_spec.rb

require 'spec_helper'
describe QueueItemsController do
        describe 'GET next' do
        it 'assigns @queue' do
          get :next, format: :json
          expect(assigns[:queue]).to eq('regular')
      end
    end
  end

queue_items_controller.rb

def next
   puts "Inside next action..."
    @queue = "regular"

end

的routes.rb

  get '/queues/:queue_id/next', :to => 'queue_items#next', :format=>'json'

佣金路线

GET  /queues/:queue_id/next(.:format)                                                        queue_items#next {:format=>"json"}
                  /queues/:queue_id/delete(.:format)                                                      queue_items#delete {:method=>:delete, :format=>"json"}
                  /queues/:queue_id/clear(.:format)                                                       queue_items#clear {:format=>"json"}

1 个答案:

答案 0 :(得分:0)

首先将match更改为getpost - 最好使用完全动词。我们说这是get

行动next位于QueueItemsController,因此测试应位于此queue_items_controller_spec.rb文件中(以及文件夹spec/controlers中)。

和测试可能类似于

describe QueueItemsController do
  describe "GET next " do

    it "responses json" do
      get :next, format: :json
      expect(response).to be_success
    end

    it "does not response html" do
      get :next, format: :html
      expect(response).not_to be_success # or define more exactly response
    end

    it 'assigns @queue' do
      get :next, format: :json
      expect(assigns[:queue]).to eq('Regular')
    end

  end
end

如果您想测试路线,请遵循以下文章:

https://www.relishapp.com/rspec/rspec-rails/v/2-14/docs/routing-specs https://www.relishapp.com/rspec/rspec-rails/docs/routing-specs/route-to-matcher