Ich benutze Ruby 2.2.1 und Rails 4.2.0Rspec testet die Wiederverwendung von Objekten
Ich füge Testfälle hinzu, um ein Modul abzudecken. Das Modul führt grundsätzlich einige QA-Prüfungen von Daten aus, die von einem anderen System übernommen wurden. Das Problem, das ich habe, ist, dass in Testfällen eine Iteration innerhalb des Moduls das gleiche Objekt anstelle der einzelnen Objekte für die einzelnen Testfälle wiederverwendet.
Beispieltestfälle:
...
it "should add issue case 1" do
trip = FactoryGirl.build(:trip, :case_1)
p trip.object_id # 7...8660
subject.do_qa(trip)
expect(trip.issue_1).not_to be_nil
end
it "should add issue case 2" do
trip = FactoryGirl.build(:trip, :case_2)
p trip.object_id # 7...2780
subject.do_qa(trip)
expect(trip.issue_2).not_to be_nil
end
...
Probennahmemodul:
module Qa
...
def self.do_qa(trips)
p trips.object_id # Same is the object id in the calling test case
@trips ||= Array.wrap(trips)
@trips.each do |t|
p t.object_id # Always the object id from the first test case!
... # Checks for case 1 and case 2
end
end
...
end
weil die Schleife wird erneut unter Verwendung des Objekts, übergibt der zweite Testfall nie, weil das Modul gerade neu Auswerten das erste trip
Objekt. Gibt es eine Möglichkeit, es zu zwingen, ein neues Objekt in der Schleife zu instantiieren?
Es gibt einen schrecklichen Weg, und es könnte einen schöneren Weg geben, aber wir müssten mehr Code sehen. Welche anderen Methoden in "Qa" beziehen sich auf "@ trips"? Welche Klasse beinhaltet 'Qa'? Was ist "Thema" in Ihren Tests? ([RSpecs Thema ist meistens eine schlechte Sache.] (Http://stackoverflow.com/questions/38437162/whats-the-difference-between-rspecs-subject-and-let-when-should-the-y-use-used)) –