簡體   English   中英

RSpec Rails測試數據

[英]RSpec Rails Test Data

我正在嘗試優化我的規格。 我通常在為嵌套資源和用戶創建測試數據時遇到問題。 我通常以設置數據的before(:each)結尾,它由120多個規范運行。 讓我告訴你:(雖然不准確,但您應該明白這一點)

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)您的想法在這里:

謝謝雷

C)創建您自己的RSpec rake任務,該任務將首先導入一些基本數據,然后使用DatabaseCleaner確保所有事務均以事務方式運行(您必須在自定義rake任務之后手動清除數據庫,因為出於某種原因,它似乎並沒有是的,但是使用DatabaseCleaner,這是單行的)。

我使用這種情況的情況是,我有一個很大的預定義數據集,需要對其進行測試並希望創建一次,然后對它進行事務處理測試。

如果這對您有吸引力,請告訴我,我可以提供更多代碼來幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM