Например.

я есть модель Family с методомlocation который объединяетlocation выходы других объектов, членов. (Участники связаны с семьями, но это не важно здесь.)

Например, учитывая

member_1 имеетlocation == 'Сан-Диего (в пути, возвращается 15 мая)'member_2 имеетlocation == Сан-Диего

Family.location может возвращать «Сан-Диего (участник_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 выполняет серию примеров, он не восстанавливает исходный класс, поэтому этот тип переопределения «отравляет» последующие примеры.

Итак, есть ли способ, чтобы заглушенный метод возвращал разные, указанные значения при каждом вызове?

Ответы на вопрос(1)

Ваш ответ на вопрос