控制器中的rspec存根变量

时间:2015-04-17 10:29:04

标签: ruby-on-rails rspec

我想测试一个动作表单控制器,在我的动作中我有类似的东西

def my_action
  @user_collection = DB.get("users")
  users = @user_collection.find({"name" => "123"})
  result_hash = {}
  users.each do |user|
    # populate result_hash here
  end

  render :json => result_hash
end

现在我想用一些测试值替换用户哈希/数组并检查json输出,

我试过这种方式(规范)

controller.stub!(:users).and_return(my_users_arr)
get :my_action

response.body.should == {1 => 3}

但是我收到了这个错误: 未定义的方法`stub!'对于'MyController:0x007fde91fd0418'

1 个答案:

答案 0 :(得分:-1)

你'错了'错了。从重构控制器代码开始:

def my_action
  render :json => users_hash
end


def users_hash
  result = {}
  # generate users hash 
  # ...
  result
end

然后,在测试方法中尝试这个:

controller.stub!(:users_hash).and_return(my_users_hash)
get :my_action
...