红宝石 – RSpec any_instance返回自我

我试图扼制某个类的任何实例.我需要使用一些数据填充自己的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,以便我们可以在实例化的每个新实例上存取提取.

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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...