加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何在rspec中存根rand?

发布时间:2020-12-17 01:36:59 所属栏目:百科 来源:网络整理
导读:我正在使用 Ruby 2.3.4和rspec 3.6.0. 我正在为使用rand(10000..99999)的对象编写测试.我在兰特上找不到任何文档,看看它是什么对象.我尝试了对内核,对象和随机进行存根(见下文),但我没有尝试导致rand被对象存根. allow(Kernel).to receive(rand).and_return(
我正在使用 Ruby 2.3.4和rspec 3.6.0.

我正在为使用rand(10000..99999)的对象编写测试.我在兰特上找不到任何文档,看看它是什么对象.我尝试了对内核,对象和随机进行存根(见下文),但我没有尝试导致rand被对象存根.

allow(Kernel).to receive(rand).and_return(12345)
allow(Object).to receive(rand).and_return(12345)
allow(Random).to receive(rand).and_return(12345)

任何帮助表示赞赏.

解决方法

rand确实在内核模块中实现.但是,在代码中调用方法时,方法接收器实际上是您自己的对象.

假设以下课程:

class MyRandom
  def random
    rand(10000..99999)
  end
end

my_random = MyRandom.new
my_random.random
# => 56789

当调用my_random.random时,rand方法的接收器(即调用该方法的对象)也是my_random实例,因为这是MyRandom #random方法中的自身对象.

在测试时,你可以在这个实例上存根rand方法:

describe MyRandom do
  let(:subject) { described_class.new }

  describe '#random' do
    it 'calls rand' do
      expect(subject).to receive(:rand).and_return(12345)
      expect(subject.random).to eq 12345
    end
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读