我试图扼制某个类的任何实例.我需要使用一些数据填充自己的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,以便我们可以在实例化的每个新实例上存取提取.
所有这一切,重要的是要“听取你的测试”,当有些事情难以测试时,可以考虑一下关于你的设计的内容,而不是立即使用任何电动工具.你的原始问题并没有给我足够的背景来推测你的设计,但是当面对需要时,这绝对是我开始的.