1
我想優化我的規格。我通常在爲嵌套資源和用戶創建測試數據時遇到問題。我通常最終會建立一個之前(:每個)設置數據,這是由我的規格超過120個運行。讓我告訴你:(這是不準確的,但你應該明白了吧)RSpec Rails測試數據
def setup_test_data
@user = FactoryGirl.create(:admin_with_account)
@account = @user.account
3.times do |n|
list = FactoryGirl.create(:list)
list.items << FactoryGirl.create_list(:item, 3)
@account.lists << list
end
end
before(:each){setup_test_data}
subject{List.merge(list1, list2)}
it{should have(6).items}
這裏是爲什麼我不能縮短我的測試數據建立
def self.merge(lists)
merged_list = lists.first.account.subscriber_lists.build
name = "Merge of "
lists.each do |list|
name << "'#{list.name}', "
list.items.each do |item|
merged_list.items.build(item.dup.attributes)
end
end
merged_list.name = name.chop.chop
merged_list.save!
merged_list.reload # I use this to filter out duplicates via validations
end
我的選項: A)移動一些邏輯回控制器,該帳戶依賴較少,保存在控制器 B)存根/嘲笑多了很多,但與嵌套資源+協會很難在這裏做
C)你的想法:
感謝 雷
謝謝,我想這可能是最好的方法。我使用fixture_builder設置了一堆燈具,然後讓我的setup_data方法將它們從數據庫中拉出來。我仍然在努力工廠序列以及DatabaseCleaner的工作方式。但是我真的不想嘲笑和琢磨那麼多,對每個規範進行的一些集成測試在過去對我很好。它只是比較慢,並不總是帶有漂亮的代碼。 – Ray 2012-03-20 09:42:38
那麼如果你有更多的問題隨時問! Factory女孩擁有相當不錯的文檔,DatabaseCleaner在他們的GitHub頁面上也是如此,所以這是一個很好的開始。嘲笑和殘留不是你應該回避的事情,因爲測試很重要,簡而言之,它們可以幫助你編寫重複測試或「不良」測試。 – MrDanA 2012-03-20 17:08:25