在我的控制器中,我有一个检查下一个项目的方法。但在执行此方法之前,我需要设置一个在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
答案 0 :(得分:0)
如果您正在编写控制器规范,则可以使用assigns
约束来测试此行为。你可能会得到这样的结论:
it "assigns @item" do
item = Item.create
get :next
expect(assigns(:item)).to eq(item)
end
如果您编写单元测试,则可以使用instance_variable_get
方法。但我会避免它 - 我会使用控制器规格。
希望有所帮助