我正在使用Ruby 2.2.1和Rails 4.2.0Rspec測試重用對象
我正在添加測試用例來覆蓋模塊。該模塊基本上對從另一個系統提取的數據執行一些QA檢查。我遇到的問題是跨越測試用例,模塊內部的迭代重複使用同一個對象,而不是各個測試用例的單個對象。
樣品測試情況:
...
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
...
樣本模塊:
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
由於環路重新使用對象,第二測試情況下從未通過,因爲該模塊只是重新評估第一個trip
對象。有沒有辦法強制它在循環中實例化一個新對象?
有一個可怕的方法,可能有更好的方法,但我們需要看到更多的代碼。 'Qa'中的其他方法是指'@ trips'?什麼課包括'Qa'?測試中的「主題」是什麼? ([RSpec的主題大多是一件壞事。](http://stackoverflow.com/questions/38437162/whats-the-difference-between-rspecs-subject-and-let-when-should-they-be-used) ) –