如何为特定实例存根实例方法?

时间:2014-08-19 07:40:36

标签: ruby stubs

我有以下情况,

class Schools::Status
  def initialize(school)
    @school = school
  end

  def active?
    true
  end
end

现在,我想为特定学校存根active?方法。

有这样的一种方法

Schools::Status.new(school).stubs(:active?).returns(false)

但我的用例不同,我有学校的搜索结果,我想根据active?值过滤该结果,如下所示:

schools.select { |s| Schools::Status.new(school).active? }

在上面的例子中,我特别想要为某个实例存根active?

2 个答案:

答案 0 :(得分:2)

只需在规范中对您的课程进行修补。更多的rspec方法是将any_instancestub一起使用,但问题是您无法访问self的{​​{1}}存根实例,因此您实际上没有关于school的信息,并且您无法在该块中访问它。 例如:

Status.any_instance.stub(:active?) { # no way to access school }

答案 1 :(得分:1)

我找到自己的答案并放在这里,以便其他人可以受益

让我们说,我school active? Schools::Status方法被隐藏。

为了实现这一目标, 首先,我们需要对new的{​​{1}}方法进行存根,以便它返回我们想要的Schools :: Status实例,并且可以按以下方式完成 -

Schools::Status

其次,我们必须为状态实例存储status = Schools::Status.new(school) # now whenever Schools::Status instance getting created for ours school # it will return our defined status instance Schools::Status.stubs(:new).with(school).returns(status) 方法 -

active?

现在,过滤器将拒绝status.stubs(:active?).returns(false) 方法返回false的指定学校