2013-11-20 163 views
0

像標題建議之間的相互作用奇怪,我有一個奇怪的錯誤。事實上,當我試圖讓保留對測試環境的操作(例如:耙測試:準備),在某種程度上它影響到其他環境,並刪除所有記錄在我的數據庫(MySQL的)。 (我使用RSpec的,我從以下邁克爾哈特爾教程) 另一個例子(也許更清晰),是當我寫牽連的創建和新用戶的取消測試throught FactoryGirl:RubyOnRails4:測試和數據庫

位置:投機/ factories.rb

FactoryGirl.define do 

    factory :user do 

    sequence(:name)   {|n| "Person #{n}"} 
    sequence(:email)   {|n| "person_#{n}@example.it"} 
    password     "luckyluke" 
    password_confirmation "luckyluke" 

    factory :admin do 
    admin true 
    end 
end 

地點:規格/請求/ users_pages_spec.rb

describe "pagination" do 

    before(:all) { 30.times { FactoryGirl.create(:user) } } 
    after(:all) { User.delete_all } 

    # tests... 
end 

雖然我到測試環境,當我運行 束的exec rspec的投機/請求/ users_pages_spec.rb,鐵軌真的對我的數據庫中創建30個用戶,而亞特真正從數據庫中刪除所有用戶。 (也是用戶在測試之前創建和存儲的!)。

P.S.對不起,我的英語

+0

檢查'配置/ database.yml'文件,以確保您的測試數據庫比開發數據庫不同。 –

回答

0

懲戒數據庫每次測試前應該發生,確保隔離。這樣一來,FactoryGirl還負責刪除其所有創造(如本answer描述):

describe "pagination" do 

    before(:each) { 30.times { FactoryGirl.create(:user) } } 

    # tests... 
end 

另外,可取的做法是數據庫之前將不包含從任何數據的考驗,因爲它可能會改變測試的行爲 - 它應該只包含測試期望它包含的內容。