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

时间:2011-06-13 21:02:39

标签: 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和new_user。

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

我正在尝试这个:

it "should ...." do

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

  res = User.some_method(....)

end

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

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

1 个答案:

答案 0 :(得分:0)

您可以这样做:

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