如果我使用的是验证双(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
答案 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}}运算符,如下所示:
===