测试(rspec)类中的模块(Ruby,Rails)

时间:2016-01-05 16:56:10

标签: ruby-on-rails ruby class rspec module

我有这个... ...

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(“hello”)我们将find_me方法作为实例化LegoFactory的实例方法。

但是,类中有很多模块包含,我只是想在不实例化LegoFactory类的情况下分离 Butter 模块。

我想在LegoFactory中测试 Butter 模块。名称由此示例组成。

可以这样做吗?

注意:我无法重构代码库,我必须使用我所拥有的。我想测试单个模块,而不需要LegoFactory类的其余部分及其他包含模块的复杂性。

1 个答案:

答案 0 :(得分: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 所需的任何方法的模拟版本。