红宝石 – RSpec any_instance返回自我

前端之家收集整理的这篇文章主要介绍了红宝石 – 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,以便我们可以在实例化的每个新实例上存取提取.

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

猜你在找的Ruby相关文章