我怎么能在最小的时候留下兰特?

时间:2015-07-24 01:57:23

标签: ruby-on-rails ruby random minitest stub

我已经尝试了Kernel.stub :rand, 1 do ... endClass.stub :rand, 1 do ... end以及self.class(因为当我运行rand(2)我跑Class时,我得rand(2) })。我也尝试用Random.rand(2)替换names = {age:sorted([name for index,name in enumerate(NAMES) if age == AGES[index]]) for age in sorted(set(AGES))} print(names) ,但它没有帮助。

那我怎么把兰德剔除?

1 个答案:

答案 0 :(得分:6)

rand是混合到每个类中的Kernel模块的一部分。要对其进行存根,您需要在调用stub的对象上调用rand

在一个例子中可能最容易看到。在以下代码中,randCoin的私有实例方法,因为Coin隐式继承自ObjectKernel。因此,我需要查看Coin实例

require "minitest/autorun"
require "minitest/mock"

class Coin
  def flip
    rand(0..1) == 1 ? "heads" : "tails"
  end
end

class CoinTest < Minitest::Test
  def test_flip
    coin = Coin.new
    coin.stub(:rand, 0) do
      assert_equal("tails", coin.flip)
    end
  end
end