0

実際にコードを実行することなく、複数のオペレーティング システムでクラス メソッドの動作をテストしようとしています。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

ここで簡単なテストプロジェクトを作成しました

これは次の方法で実行できます。

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 に答える