Kann die RSpec-Stub-Methode verschiedene Werte nacheinander ausgeben?
Ich habe eine Modell-Familie mit einer Methode location
verschmilzt die location
Ausgaben der anderen Objekte, die Mitglieder. (Die Mitglieder sind im Zusammenhang mit den Familien, aber das ist hier nicht wichtig.)
Beispielsweise gegeben
- member_1 hat
location
== 'San Diego (Reisen, gibt 15 Mai)' - member_2 hat
location
== 'San Diego'
Familie.Standort zurückkehren könnte 'San Diego (member_1 Reisen, gibt 15 Mai)" Die Einzelheiten sind unwichtig.
Zur Vereinfachung der Prüfung von Familie.Lage-ich will stub-Mitglied.Lage. Allerdings brauche ich Sie, um zurückzukehren, zwei verschiedenen (genannten) Werte wie im obigen Beispiel. Im Idealfall würden diese basiert auf einem Attribut von member
sondern einfach die Rückgabe unterschiedlicher Werte in eine Reihenfolge wäre OK. Gibt es eine Möglichkeit, dies zu tun in RSpec?
Ist es möglich, das überschreiben der Mitglied.Speicherort-Methode innerhalb der einzelnen test-Beispiel, wie
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
aber ich bezweifle, dass dies ist eine gute Praxis. In jedem Fall, wenn RSpec ausgeführt wird, eine Reihe von Beispielen ist es nicht die Wiederherstellung der ursprünglichen Klasse, also diese Art von überschreiben "Gifte" die nachfolgenden Beispiele.
So, ist es ein Weg, um ein gekürzte Methode zurück, andere, angegebene Werte bei jedem Aufruf?
InformationsquelleAutor der Frage Mike Blyth | 2011-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die stub-Methode unterschiedliche Werte zurückgeben jedes mal, wenn es heißt;
Also das erste mal, wenn Sie anrufen
@family.location
wird es wieder der 'erste', das zweite mal wird es wieder "zweiten", und alle nachfolgenden Zeiten, die Sie es nennen, wird es wieder 'andere'.InformationsquelleAutor der Antwort idlefingers
RSpec 3 syntax:
InformationsquelleAutor der Antwort nothing-special-here
Wenn aus irgendeinem Grund, Sie wollen die alte syntax, können Sie immer noch:
InformationsquelleAutor der Antwort ndn
Ich habe versucht die Lösung hier skizzieren oben, aber es funktioniert nicht für meine. Ich löste das problem, indem stubbing mit einem Ersatz-Umsetzung.
Etwas wie:
InformationsquelleAutor der Antwort matteo