如何验证 rspec instance_double 作为双倍类的实例?

bre*_*ter 6 ruby rspec

在我的代码中,我测试一个对象是特定类的实例,但是实例双精度是一个类RSpec::Mocks::InstanceVerifyingDouble

一个人为的例子是......

# spec
@double = instance_double Foo
allow(Bar).to receive(:foo).and_return @double

# lib
until Bar.foo.instance_of? Foo
  # logic to test
  if something == true
    Bar.foo = Foo.new
  else
    Bar.foo = nil
  end
end
Run Code Online (Sandbox Code Playgroud)

有什么方法可以操纵 rspec double 来模拟该类吗?或者我是否需要返回 Foo 的实际实例?

更新 我想说的是,他们目前解决问题的方式是这样的......

# spec
allow(Bar).to receive(:foo).and_return Foo.allocate

# lib
if Bar.foo.instance_of? Foo
  # do something
end
Run Code Online (Sandbox Code Playgroud)

我对这个解决方案很满意,因为 Foo 上的初始化实际上并未执行,但我更喜欢使用 rspec/doubles 来保持一致性

更新 将示例更改为(希望)更清晰。我需要测试 的结果 something,VS 的结果Bar.foo编写人为的例子很困难:)

小智 0

当然。您只需存根即可#instance_of?返回您想要的内容。

@double = instance_double Foo
allow(@double).to receive(:instance_of?).with(Foo).and_return(true)
allow(Bar).to receive(:foo).and_return @double
Run Code Online (Sandbox Code Playgroud)