RSpec - 存根类方法

Mar*_*ark 2 ruby rspec ruby-on-rails mocking

我在项目中间添加了以下方法:

def finishes_after_venue_shuts?
  return unless venue && finish
  day = regular_day ? regular_day : start.strftime('%a').downcase
  finish > venue.openingtimes.where(default_day: day).pluck(:finish)[0]
end
Run Code Online (Sandbox Code Playgroud)

这导致1000多个测试在项目中失败.他们失败了以下错误代码:

ArgumentError:
  comparison of ActiveSupport::TimeWithZone with nil failed
Run Code Online (Sandbox Code Playgroud)

我试图将方法存根如下,但显然做错了:

before do
  allow(Event.any_instance).to receive(:finishes_after_venue_shuts?).and_return(false)
end
Run Code Online (Sandbox Code Playgroud)

用于存根方法并简单地返回false而不是执行代码的正确语法是什么?

提前致谢.

And*_*eko 7

你很接近:)

allow_any_instance_of(Event)
  .to receive(:finishes_after_venue_shuts?)
  .and_return(false)
Run Code Online (Sandbox Code Playgroud)