方法中的一段代码device_names
可能会调用其他 Ruby 类中的某些方法,然后这些调用的结果将由您的代码操作。您可以存根这些调用并单独测试您的方法。
这是一个(愚蠢的)示例,说明如何在 String 类的任何实例上创建存根:
String.any_instance.stub(:downcase).and_return("TEST")
downcase
现在对任何 String 实例的任何调用都将返回“TEST”。你可以玩它irb
:
irb(main):001:0> require 'rspec/mocks'
=> true
irb(main):002:0> RSpec::Mocks::setup(self)
=> #<RSpec::Mocks::Space:0x10a7be8>
irb(main):003:0> String.any_instance.stub(:downcase).and_return("TEST")
=> #<RSpec::Mocks::AnyInstance::StubChain:0x10a0b68 @invocation_order={:stub=>[nil], :with=>[:stub], :and_return=>[:wit
, :stub], :and_raise=>[:with, :stub], :and_yield=>[:with, :stub]}, @messages=[[[:stub, :downcase], nil], [[:and_return,
"TEST"], nil]]>
irb(main):004:0> "HAHA".downcase
=> "TEST"
当然,您也可以对单个实例中的方法、特定参数等进行存根。阅读更多关于存根方法的信息。
现在您知道平台特定代码将返回什么,您可以测试您的方法并始终获得预期的结果。