如何在MiniTest中使用参数存根方法

4

我可以像这样 stub 一个方法:

def test_stale_eh
  obj_under_test = Something.new
  refute obj_under_test.stale?

  Time.stub :now, Time.at(0) do
    assert obj_under_test.stale?
  end
end

来自http://www.rubydoc.info/gems/minitest/4.2.0/Object:stub

但是我找不到如何为带参数的方法打桩的信息。 例如,如果我想为Time.parse方法进行打桩,我应该怎么写呢?

1个回答

13

如果你想让结果始终相同(即存根方法的结果不依赖于参数),你可以将其作为值传递给 stub

expected_time = Time.at(2)

Time.stub :parse, Time.at(2) do
  assert_equal expected_time, Time.parse("Some date")
end

如果您想根据参数返回不同的结果,可以传递可调用的内容。 文档说明

如果val_or_callable 响应 #call,则返回调用它的结果,否则将值原样返回。

这意味着您可以做一些类似于这个人为的示例:

stub = Proc.new do |arg|
  arg == "Once upon a time" ? Time.at(0) : Time.new(2016, 9, 30)
end

Time.stub :parse, stub do
  assert_equal Time.new(2016, 9, 30), Time.parse("A long, long time ago")
  assert_equal Time.at(0), Time.parse("Once upon a time")
end

整个互联网上最好的答案! - mbao01

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接