我有以下情况,
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?
。
答案 0 :(得分:2)
只需在规范中对您的课程进行修补。更多的rspec方法是将any_instance
与stub
一起使用,但问题是您无法访问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的指定学校