如何模拟Rspec Verifying double的类

时间:2014-12-26 22:08:13

标签: rspec rspec3

如果我使用的是验证双(object_double),如何模拟对象的类以使===有效?

例如,如果我的代码如下:

def foo(record)
  case record
  when Bar
    OtherObject.call
  end
end

这不起作用:

it 'should call OtherObject if record is instance of Bar'
  record = object_double(Bar.new, class: Bar)
  expect(OtherObject).to receive(:call)
  foo(record)
end

1 个答案:

答案 0 :(得分:1)

在您模拟class对象的record方法时,正在测试的代码使用case运算符,该运算符依赖于=== Bar方法{1}}。 ===运算符是根据参数是否是给定类的“种类”非正式描述的,但不保证实现将使用kind_of?is_a?或{ {1}}或任何其他特定方法。特别是CRuby 2.1.5实现如下:

class

因此,我认为唯一可以确保被测试代码可行的方法是模拟 static VALUE rb_mod_eqq(VALUE mod, VALUE arg) { return rb_obj_is_kind_of(arg, mod); } 的{​​{1}}运算符,如下所示:

===