问题描述
|
我的方法如下:
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)