我正在尝试在多个操作系统中测试类方法的行为,而不必实际运行代码。我正在使用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.*?
方法,但它似乎不起作用。我怎么能这样做?
答案 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