我正在使用 Ruby on Rails 和我的开发计算机上没有的某些硬件。
使用Rails.env
我想“加倍”一个类的实例,以便不调用“实际实现”(〜double class XY iff Rails.env == :production
)。
我已经尝试过rspec-mocks的double
,但它需要预期并抛出异常。
答案 0 :(得分:0)
最后我使用了以下代码:
class Double
def method_missing(m, *args, &block)
puts "#{m} was called with arguments: #{args.join(', ')}"
end
end
当然这不适用于在Object
上声明的方法,但它足以满足我的需求。它也没有传递参数的能力。
此外,我编写了一个小辅助函数来基于类常量实例化对象。由于我的代码中有一些单例,我也实现了检查。这样,实际类只在rails环境是“生产”时才被实例化。
def instance_of(c)
if Rails.env == 'production'
if c.ancestors.include? Singleton
c.instance
else
c.new
end
else
Double.new
end
end
使用示例:SOME_CONST = instance_of ModuleXY::ClassZ
。