ruby on rails 3-在过滤器rspec之前检查实例变量值



在我的控制器中,我有一个检查下一项的方法。但在执行此方法之前,我需要设置一个实例变量,该变量是在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方法。但我会避免——我会选择控制器规格。

希望对有所帮助

最新更新