2013-11-23 86 views
0

例如:Rspec的運行測試在驗證錯誤的結果

我運行一個測試和所有斷言通,但我再次運行測試,並在我的情況,我收到以下錯誤:

驗證失敗:電子郵件已被採取

它似乎增加:序列(:電子郵件){| n | 「nobody #{n}@xyz.com」}對於女生來說毫無意義

測試似乎有時會通過,而其他測試似乎因錯誤原因而失敗。

請告知問題/解決方案。

+1

您是在每次運行之前/之後清除測試數據庫嗎?如果你運行測試,然後手動運行'rake db:test:prepare',然後再次運行測試,它們通過還是失敗? (通常這是由'database_cleaner'或事務性固定裝置自動處理的,但某些東西可能配置不正確,或者您的數據庫可能處於不良狀態) – Grantovich

回答

0

嘗試在運行測試用例之前刪除表中的所有記錄。

如: -

describe User do 
    before(:each) do 
    User.delete_all 
    end 

    it "validate e-mail" do 
    (do staff..) 
    end 
end 
0

我不確定這是一個明確的解決方案,但我使用懶惰屬性添加隨機數到我的產品參考的工廠,factorygirl。

例子:

FactoryGirl.define do 
    factory :product do 
    reference    {"AB"+rand(999).to_s} 
    description   "Test Product" 
    quantity    {(1..9999).to_a.sample} 
    price_per_unit   {((1..999999).to_a.sample)/100.to_f} 
    end 
end 
0

你任何 「之前(:所有)」 有塊?也許你錯過了相應的「after(:all)」來清理數據。之前(:each)充當事務,因此數據庫得到清理,在(:all)像普通查詢一樣工作之前,您不得不在after(:all)塊中處理清理。