Ruby on rails 您能为方法调用中的方法编写存根/模拟/双精度吗?

Ruby on rails 您能为方法调用中的方法编写存根/模拟/双精度吗?,ruby-on-rails,rspec,Ruby On Rails,Rspec,我的方法如下所示: def some_method(....) user = User.where("....").first if !user.nil? if .. user.delete elsif user.update_attributes(...) else new_user = User.new(...) new_user.save! end end 正如您所看到的,user和ne

我的方法如下所示:

def some_method(....)

  user = User.where("....").first

  if !user.nil?

     if ..
         user.delete
     elsif
         user.update_attributes(...)

  else
     new_user = User.new(...)
     new_user.save!
  end

end
正如您所看到的,user和new_user都是在这个方法中实例化的

在测试方法时,是否可以对这些对象进行存根和模拟(期望)

我正在尝试:

it "should ...." do

  d = double("user double")
  d.should_receive(:save!).once

  res = User.some_method(....)

end
但是我得到一个错误,说预期1次,收到0次


我这样做对吗?(显然不可能,因为我无法将这些存根/模拟传递给正在测试的方法,所以是否可以对其进行测试)

您可以执行以下操作:

user_double = double("user")
User.should_receive(:where).and_return(user_double)
user_double.should_receive(:delete)

我正在这样做(见上文),但仍然得到预期的1次,收到0次失败/错误。对于User.should_receive(:where).once可以发布您正在使用的实际代码。您上面的代码不包含User.should\u receive(:where)。