2011-03-24 31 views
1

我正在通過railstutorial.org網站工作,並且似乎遇到了集成測試問題。假設用戶在表單發佈後能夠正確創建用戶,但在後續測試中失敗,因爲測試數據庫沒有得到回滾支持,這會導致錯誤,因爲驗證用戶不能擁有相同的電子郵件。任何解釋爲什麼記錄會持續下去?如果相關代碼來自this列表。在Rails3中記錄持續過去的測試

回答

2

注:我是Rails Tutorial的作者。在Peter Cooper reported之後,config.cache_classes = false行被添加,因此有必要讓RSpec和Spork在他的系統上一起工作。由於我沒有發現它是必要的,並且由於它似乎引入了很多問題(例如在此線程中標識的那些問題),因此該行已被刪除。如果你使用the latest version of the book你不應該遇到這個問題。

+0

本教程似乎使用spork是可選的。不知道它是否重要,但我選擇不使用spork,因爲我認爲它會簡化事情。 RSpec和自動測試會在我的macbook pro上產生0-3秒的結果,這對我來說似乎總是足夠快。我想我一旦寫了足夠大的東西來保證優化開發週期,我就會考慮spork。也許這使我成爲「少數配置」用戶。不知道這是否說明我已經在路上碰到一個碰撞http://stackoverflow.com/q/5308307/657003 – 2011-04-26 17:29:40

+0

這正是我最終做的,因爲這是我從你的回購中得到的唯一區別雖然我不知道有什麼改變這個設置的奇怪之處 – JoeyJ 2011-04-27 07:52:30

0

看看使用database_cleaner。您的規格助手將包含這樣的事情:

config.before(:suite) do 
    DatabaseCleaner.strategy = :transaction 
    DatabaseCleaner.clean_with :truncation  
end 

config.before(:each) do 
    ActionMailer::Base.deliveries = [] 
    DatabaseCleaner.start 
end 

config.after(:each) do 
    DatabaseCleaner.clean 
end 

config.after(:all) do 
    DatabaseCleaner.clean_with :truncation 
end 
+0

RSpec已經假設要在事務中運行所有事情,所以我更加困惑,爲什麼它不工作與 – JoeyJ 2011-03-24 19:48:28

0

看來,這個問題是與

config.cache_classes = false 

我有這個設置爲false,假設它會確保不使用陳舊的類數據線,但它似乎在其他方面具有相反的效果。把它變成真正的固定了我所有的古怪,但我仍然困惑於爲什麼。我認爲它可能與操作系統有關,因爲在教程中,對於OSX(我正在運行)將該行設置爲true的操作正常,而其他操作系統需要將其設置爲false

+0

該行是配置/環境中的test.rb文件的一部分 – JoeyJ 2011-03-25 04:15:40

0

雖然Hartl的教程讓我感到無懈可擊,也許你在這裏提出的問題可以歸類爲重要的遺漏。

此位置:RailsTutorial - chapter 8.4.3 - Test database not clearing after adding user in integration test

此位置:Rails 3 Tutorial Chapter 11 "Validation failed: Email has already been taken" error

此位置:config.cache_classes = false messing up rspec tests?

...在同一個問題的所有變化。

邁克哈特爾,如果你在那裏,你似乎只是一個問題,遠離RoR教程的完美。

最好的問候,

佩裏