-2
我正在使用Ruby on Rails與某些硬件在我的開發機器上不可用。雙重Ruby類的實例
使用Rails.env
我想「雙規」的一類,使「真正實現」不叫(〜double class XY iff Rails.env == :production
)的實例。
我試過rspec-mocks的double
,但它需要期望,否則拋出異常。
我正在使用Ruby on Rails與某些硬件在我的開發機器上不可用。雙重Ruby類的實例
使用Rails.env
我想「雙規」的一類,使「真正實現」不叫(〜double class XY iff Rails.env == :production
)的實例。
我試過rspec-mocks的double
,但它需要期望,否則拋出異常。
最後,我用下面的代碼:
class Double
def method_missing(m, *args, &block)
puts "#{m} was called with arguments: #{args.join(', ')}"
end
end
當然,這並不對這些都對Object
聲明的方法的工作,但它是足夠滿足我的需求。它也不能傳遞參數。
此外,我寫了一個小輔助函數來基於類常量實例化對象。由於我的代碼中有一些單身人士,我也對此進行了檢查。這樣,真正的類只在軌道環境爲「生產」時才實例化。
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
。