2012-10-04 33 views
2

我們的應用程序支持多種類型的賬戶,因此我們的許多測試遍歷所有賬戶類型。rspec和鐵軌和水豚:如何使用相同的測試來測試工廠的6個不同變體

但是,我們常見的模式是每個帳戶類型的第一步都是相同的,但MID方式通過我們想要測試每個帳戶類型的某些獨特方面。以下是一個測試的高級視圖:

all_account_types.each do | account_type |

  • 創建一個帳戶,工廠特質ACCOUNT_TYPE
  • 創建帳戶管理器工廠
  • 5人的工廠選擇加入該帳戶,然後
  • 1人選擇退出
  • 經理創建併發送一個廣播
  • 一個選擇退出沒有得到消息
  • 四個選擇插入獲取消息
  • 驗證消息的格式(取決於帳戶類型)

這最後的測試是問題......我們運行的測試取決於帳戶的類型。目前,我們有內部的邏輯上面寫着if account_type==X then Y.should include(Z)和工作儘量做測試,但它會在測試更好

回答

1

不要忘了let是懶惰的評估,這意味着你可以一個例子或上下文之前覆蓋測試設置:

context "Accounts" do 
    let(:account) { Factory.create(:generic_account) } 

    it "behaves like an account" do 
    # ... 
    end 

    context "Manager account" do 
    let(:account) { Factory.create(:manager_account } 

    it "behaves like a manager account" do 
     account.type.should == "manager" 
     # ... 
    end 
    end 
end