Peut RSpec écrasé de retour de méthode de valeurs différentes dans la séquence?

J'ai un modèle de la Famille avec une méthode location qui fusionne les location les résultats d'autres objets, les Membres. (Les membres sont associés avec les familles, mais ce n'est pas important ici).

Par exemple, étant donné

  • member_1 a location == 'San Diego (voyages, renvoie 15 Mai)'
  • member_2 a location = = "San Diego"

De la famille.emplacement peut-retour 'de San Diego (member_1 voyage, renvoie 15 Mai)" Les détails ne sont pas importants.

Pour simplifier le test de la Famille.l'emplacement, je veux stub Membre.emplacement. Cependant, j'ai besoin de retourner deux (spécifié) valeurs comme dans l'exemple ci-dessus. Idéalement, celle-ci serait basée sur un attribut de member, mais simplement de retourner des valeurs différentes dans une séquence serait OK. Est-il un moyen de le faire dans RSpec?

Il est possible de remplacer le Membre.la méthode de localisation à l'intérieur de chaque exemple de test, tels que

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

mais je doute que c'est une bonne pratique. En tout cas, quand RSpec est en cours d'exécution d'une série d'exemples, il ne restitue pas la classe d'origine, si ce genre de remplacer les "poisons" les exemples suivants.

Alors, est-il un moyen d'avoir un écrasé de retour des méthodes différentes, des valeurs spécifiées sur chaque appel?

InformationsquelleAutor Mike Blyth | 2011-05-10