rspec 3 - 存根类方法

Posted

技术标签:

【中文标题】rspec 3 - 存根类方法【英文标题】:rspec 3 - stub a class method 【发布时间】:2014-09-23 20:36:13 【问题描述】:

我正在从 rspec 2.99 升级到 rspec 3.0.3,并已将实例方法转换为使用 allow_any_instance_of,但还没有弄清楚如何存根类方法。我有这样的代码:

module MyMod
  class Utils
    def self.find_x(myarg)
      # Stuff
    end
  end
end

我的 rspec 2 测试是这样做的:

MyMod::Utils.stub(:find_x).and_return(something: 'testing')

Rspec 3 的做法是什么?

【问题讨论】:

【参考方案1】:

你应该这样做

allow(MyMod::Utils).to receive(:find_x).and_return(something: 'testing')

查看文档Method stubs

【讨论】:

我正在尝试实现这一点,但是当我编写该模拟然后编写 expect(Class.foo).to eq(bar) 时,我收到“错误数量的参数错误”,因为 foo 方法通常需要 2 个参数... .但我只是希望它返回我放入存根中的内容 FWIW,这种形式会使我的 ruby​​ 解释器崩溃。但是,and_return 并不是严格需要的,可以省略。 (我的 ruby​​ 解释器也不会崩溃。) @sixty4bit 你有什么理由不能用参数调用它吗? @sixty4bit expect(Class.foo).to receive(bar).with(arg1, arg2).and_return(..object)

以上是关于rspec 3 - 存根类方法的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法用 Rspec 存根包含模块的方法?

RSpec 存根方法可以按顺序返回不同的值吗?

使用Rspec存根和模拟在Rails Oauth中实现100%的测试覆盖率

在 Laravel 5.3 项目中使用 PHPUnit 存根类方法调用的问题

在 OCMPartialMock 上存根类方法?

所有调用的 OCMock 存根类方法