Double一个Ruby类的实例

时间:2014-04-28 21:19:03

标签: ruby-on-rails ruby mocking double stub

我正在使用 Ruby on Rails 我的开发计算机上没有的某些硬件

使用Rails.env我想“加倍”一个类的实例,以便不调用“实际实现”(〜double class XY iff Rails.env == :production)。

我已经尝试过rspec-mocks的double,但它需要预期并抛出异常。

1 个答案:

答案 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