我的导轨中有一个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"}
答案 0 :(得分:0)
首先将match
更改为get
或post
- 最好使用完全动词。我们说这是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