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

Cam*_*rzt 4 ruby random ruby-on-rails stub minitest

我试过Random.stub :rand, 1 do ... endKernel.stub :rand, 1 do ... endClass.stub :rand, 1 do ... end(因为当我跑self.class,我跑rand(2)我得到的Class).我也尝试过更换rand(2),Random.rand(2)但没有用.

那么我该怎么把兰德剔除?

Mat*_*son 6

randKernel每个类中混合的模块的一部分.要存根它,您需要调用正在调用stub的对象rand.

在一个例子中可能最容易看到.在下面的代码中,rand是一个私有实例方法Coin,因为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
Run Code Online (Sandbox Code Playgroud)