2016-01-05 42 views
0

我有这个与工作...测试(RSpec的)一个类中的模块(红宝石,Rails)的

class LegoFactory # file_num_one.rb 

    include Butter # this is where the module is included that I want to test. 
    include SomthingElse 
    include Jelly 

    def initialize(for_nothing) 
    @something = for_nothing 
    end 
end 

class LegoFactory # file_num_2.rb 
    module Butter 

    def find_me 
     # test me! 
    end 
    end 
end 

所以,当LegoFactory.new( “你好”),我们得到find_me方法实例化的LegoFactory的一个实例方法。

但是,这里有很多模块,我只是想分开黄油模块,而没有实例化LegoFactory类。

我想测试LegoFactory内ONLY黄油模块。名称由这个例子组成。

可以这样做吗?

注意:我不能重构代码库,我必须使用我的工作。我只想测试单个模块,而不需要复杂的LegoFactory类和其他包含的模块。

回答

2

做到这一点的方法是创建一个假类,包含你的模块,以测试它:

describe LegoFactory::Butter do 
    let(:fake_lego_factory) do 
    Class.new do 
     include LegoFactory::Butter 
    end 
    end 
    subject { fake_lego_factory.new } 

    describe '#find_me' do 
    it 'finds me' do 
     expect(subject.find_me).to eq :me 
    end 
    end 
end 

您也可以在假类实现任何方法的嘲笑版本由find_me要求