如何在RSpec中存储外部ruby gem的方法?

时间:2013-02-27 19:49:43

标签: ruby rspec2

我正在尝试在多个操作系统中测试类方法的行为,而不必实际运行代码。我正在使用OS Rubygem

我想在RSpec中测试这个函数的3个案例:

  def get_os()
    if OS.linux?
      return "linux#{OS.bits}"
    elsif OS.mac?
      return "mac"
    elsif OS.doze?
      return "win"
  end

我已经创建了一个快速测试项目here

您可以使用以下命令运行:

git clone git://github.com/trinitronx/rspec-stubmock-test.git
cd rspec-stubmock-test/
bundle install
rspec

我尝试手动覆盖OS.*?方法,但它似乎不起作用。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

你应该能够存根这样的方法:

describe "#get_os" do

  subject { TestMe.new.get_os }

  context "on a linux machine" do

    before do
      OS.stub(linux?: true, mac?: false, doze?: false, bits: 64)
    end

    it { should eq 'linux64' }
  end

  context "on a mac" do

    before do
      OS.stub(linux?: false, mac?: true, doze?: false, bits: 64)
    end

    it { should eq 'mac' }
  end

  # etc etc
end