【发布时间】:2011-08-22 07:46:43
【问题描述】:
我有一个带有 location 方法的模型 Family,它合并了其他对象成员的 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 运行一系列示例时,它不会恢复原始类,因此这种覆盖“毒害”了后续示例。
那么,有没有办法让存根方法在每次调用时返回不同的指定值?
【问题讨论】:
标签: ruby-on-rails testing rspec stub