0

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

我想在 RSpec 中测试这个函数的 3 种情况:

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

我在这里创建了一个快速测试项目

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

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

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

4

1 回答 1

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
于 2013-02-27T19:53:29.847 回答