在我的控制器中,我有一个检查下一项的方法。但在执行此方法之前,我需要设置一个实例变量,该变量是在before_filter方法中编写的。那么我该如何在rspec中测试它呢。
before_filter method check_items, :only[:next]
def check_items
if params[:item] == "Sherlock"
@item = $book1
elsif params[:item] == "Harry"
@queue = $book2
else
render :json=>{"Error" => "Book name does not exist"}
end
end
==========================
def next
@book = @item.pull
unless @book.nil?
respond_with(@book)
else
render :json =>{"msg"=>"Nothing to pull"}
end
end
如果您正在编写控制器规范,您可以使用assigns
约束来测试这种行为。你可能会得到这样的结果:
it "assigns @item" do
item = Item.create
get :next
expect(assigns(:item)).to eq(item)
end
如果您编写单元测试,您可以使用instance_variable_get
方法。但我会避免——我会选择控制器规格。
希望对有所帮助