gpt4 book ai didi

ruby - RSpec any_instance 返回 self

转载 作者:数据小太阳 更新时间:2023-10-29 06:36:54 24 4
gpt4 key购买 nike

我正在尝试 stub 某个类的任何实例。我需要 stub fetch 方法,它用一些数据填充 self。

如何访问 self 变量,修改它并返回 fetch 方法?

MyObject.any_instance.stub(:fetch) { self }

不返回 MyObject 实例。

也许,模拟在这种情况下更有用。不幸的是,我还没有理解它们。

最佳答案

有一个 open rspec-mocks issue解决这个问题。我希望在某个时候解决这个问题,但是以一种不破坏现有规范套件的方式添加它并不简单,这些规范套件使用 any_instance block 实现,因为我们会开始屈服一个额外的参数(例如对象实例)。

总的来说,any_instance 在某些情况下可以派上用场,但它有点难闻,如果你能找到一种方法来模拟或 stub 单个实例,你通常会遇到更少的问题。

这是我尚未测试但应该可行的解决方法:

orig_new = MyObject.method(:new)
MyObject.stub(:new) do |*args, &block|
orig_new.call(*args, &block).tap do |instance|
instance.stub(:fetch) { instance }
end
end

本质上,我们在这里通过 Hook 到 MyObject.new 来模拟 any_instance,这样我们就可以在每个新实例上 stub fetch实例化。

总而言之,重要的是“倾听您的测试”,并且当某些东西难以测试时,请考虑您的设计,而不是立即使用像 any_instance 这样的强大工具。您最初的问题没有提供足够的背景信息让我推测您的设计的任何内容,但这绝对是我在需要这样做时的起点。

关于ruby - RSpec any_instance 返回 self ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893618/

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