2016-08-13 36 views
0

下面不寫我的數據庫,所以我的測試失敗:「讓」在rspec的不寫入數據庫

let(:level_1) { Fabricate(:level, number: 1, points: 100) }  
let(:level_2) { Fabricate(:level, number: 2, points: 200) } 

Level.count # 0 

但是,下面的工作做

before do 
    level_1 = Fabricate(:level, points: 100, number: 1) 
    level_2 = Fabricate(:level, points: 200, number: 2) 
end 

Level.count # 2 

這似乎很奇怪。

回答

3

因爲let是懶惰加載的。意思是,只有當你調用level1level2(在這個例子中)時,塊纔會被執行並且記錄會被創建。解決方法是在每個示例之前調用let!

嘗試

let!(:level_1) { Fabricate(:level, number: 1, points: 100) }  
let!(:level_2) { Fabricate(:level, number: 2, points: 200) } 

現在,Level.count將返回2

如需更多信息,請參閱https://www.relishapp.com/rspec/rspec-core/v/2-5/docs/helper-methods/let-and-let

+0

,因爲這使。所以如果我打電話給level_1,那麼Level.count == 1?另外,我也參與了一個不需要我使用let的項目。發送到數據庫。有沒有我可以在spec_helper中更改的選項來執行此操作? – josh

+0

@josh在每個示例之前使用'let!'或定義'before'塊並調用'level_1'。 ''' 做 LEVEL_1 LEVEL_2 年底前 ''' 在運行示例之前這將創建的記錄。我更喜歡'let!',因爲它的筆畫數量較少。 –