加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

红宝石 – RSpec any_instance返回自我

发布时间:2020-12-16 19:59:00 所属栏目:百科 来源:网络整理
导读:我试图扼制某个类的任何实例.我需要使用一些数据填充自己的fetch方法. 如何访问自变量,修改它并返回fetch方法? MyObject.any_instance.stub(:fetch) { self } 不返回MyObject实例. 也许嘲笑在这种情况下更有用.不幸的是,我还没有明白. 解决方法 有一个 open
我试图扼制某个类的任何实例.我需要使用一些数据填充自己的fetch方法.

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

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

不返回MyObject实例.

也许嘲笑在这种情况下更有用.不幸的是,我还没有明白.

解决方法

有一个 open rspec-mocks issue来解决这个问题.我希望能够在某个时候解决这个问题,但是不要以任何方式使用any_instance与块实现来破坏现有的规范套件并不简单,因为我们将开始产生一个额外的参数(例如对象实例).

总的来说,在某些情况下,any_instance可能会派上用场,但它有一点异味,如果您可以找到一种方法来模拟或存储单个实例,那么通常会有更少的问题.

这是一个我没有测试但应该工作的工作:

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

基本上,我们通过挂入MyObject.new来模拟any_instance,以便我们可以在实例化的每个新实例上存取提取.

所有这一切,重要的是要“听取你的测试”,当有些事情难以测试时,可以考虑一下关于你的设计的内容,而不是立即使用任何电动工具.你的原始问题并没有给我足够的背景来推测你的设计,但是当面对需要时,这绝对是我开始的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读