2014-04-28 56 views
-2

我正在使用Ruby on Rails某些硬件在我的開發機器上不可用雙重Ruby類的實例

使用Rails.env我想「雙規」的一類,使「真正實現」不叫(〜double class XY iff Rails.env == :production)的實例。

我試過rspec-mocks的double,但它需要期望,否則拋出異常。

回答

0

最後,我用下面的代碼:

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