我正在使用带有 rspec-rails 3.7 和 rails-controller-testing gem 的 Rails 5.2。我有一个控制器可以过滤索引操作的结果(是的,不好的做法,遗留代码等)。问题是我需要测试当我这样做时GET work_orders/index params: { keywords: 'some word' }
,实例变量@work_orders 返回过滤结果,但如果我使用assigns(:work_orders)
它返回nil。我什至测试了将最后一个 WorkOrder 分配给该变量的方法,但它仍然没有在散列中显示该变量。
work_orders_controller.rb
def index
... some code ...
@work_orders = WorkOrder.last
respond_to do |format|
format.html
end
end
规格/控制器/work_orders_controller_spec.rb
require 'rails_helper'
describe WorkOrdersController do
describe 'GET index' do
it 'collects work orders filtered by courier_ot in @work_orders' do
get :index
expect(assigns(:work_orders)).to be_an_instance_of WorkOrder
end
end
end
这是我测试过的最简单的例子,但它不起作用。该assigns
调用返回 nil,如果我使用 byebug 检查哈希,它只有这个:{"marked_for_same_origin_verification"=>true}
。
真正的测试应该使用get :index, params: { keywords: 'asdf' }
并测试它是否获得过滤的工单。
任何帮助,将不胜感激。谢谢。