在过滤rspec之前检查实例变量值

时间:2014-04-25 04:53:41

标签: ruby-on-rails-3 rspec2

在我的控制器中,我有一个检查下一个项目的方法。但在执行此方法之前,我需要设置一个在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

1 个答案:

答案 0 :(得分:0)

如果您正在编写控制器规范,则可以使用assigns约束来测试此行为。你可能会得到这样的结论:

it "assigns @item" do
  item = Item.create
  get :next
  expect(assigns(:item)).to eq(item)
end

如果您编写单元测试,则可以使用instance_variable_get方法。但我会避免它 - 我会使用控制器规格。

希望有所帮助