我有一个模型家庭模型,该模型location
可以合并location
其他对象(成员)的输出。(成员与家庭有联系,但这在这里并不重要。)
例如,给定
- member_1具有
location
=='圣地亚哥(旅行,返回5月15日)' - member_2具有
location
=='圣地亚哥'
Family.location可能返回“圣地亚哥(member_1出行,5月15日返回)”,具体情况并不重要。
为了简化Family.location的测试,我想对Member.location进行存根。但是,我需要它返回两个不同的(指定的)值,如上例所示。理想情况下,它们将基于的属性member
,但是简单地按顺序返回不同的值就可以了。有没有办法在RSpec中做到这一点?
可以在每个测试示例中覆盖Member.location方法,例如
it "when residence is the same" do
class Member
def location
return {:residence=>'Home', :work=>'his_work'} if self.male?
return {:residence=>'Home', :work=>'her_work'}
end
end
@family.location[:residence].should == 'Home'
end
但是我怀疑这是个好习惯。无论如何,当RSpec运行一系列示例时,它不会还原原始类,因此,这种重写会“毒化”后续示例。
因此,有没有一种方法可以使存根方法在每次调用时返回不同的指定值?