gpt4 book ai didi

ruby - 如何将 rspec instance_double 验证为 doubled 类的实例?

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:25 26 4
gpt4 key购买 nike

在我的代码中,我测试对象是特定类的实例,但是实例 double 是 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

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

更新我的意思是,我目前解决问题的方式是这样的......

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

# lib
if Bar.foo.instance_of? Foo
# do something
end

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

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

最佳答案

当然。您可以只 stub #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

关于ruby - 如何将 rspec instance_double 验证为 doubled 类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39566348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com