У меня есть семейство моделей с методом location
, который объединяет location
выходы других объектов-членов.(Участники связаны с семьями, но здесь это не важно.)
Например, если
- member_1 имеет
location
== 'Сан-Диего (в пути, возвращается 15 мая)' - member_2 имеет
location
==' Сан-Диего '
Family.location может вернуть' San Diego (member_1 путешествует, возвращается 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 запускает серию примеров, он не восстанавливает исходный класс, поэтому этот тип переопределения «отравляет» последующие примеры.
Итак, есть ли способ вернуть метод с заглушкой?разные, указанные значения при каждом вызове?