2011-09-17 29 views
6

我希望'rake test:units'在開發數據庫關閉期間成功地在準備好的測試數據庫上運行測試。目前,rails正在嘗試從開發數據庫構建測試數據庫。這可能嗎?通過Rake測試Rails:不要觸摸我的開發數據庫

我處於我的prod/dev數據庫不在主機上的情況,但爲了進行單元測試,我在內存數據庫中使用了sqlite。

編輯我的確切操作:注意我用Rails 2.3

我的測試數據庫中設置這樣的config/database.yml中:

test: 
    adapter: sqlite3 
    database: 'sqlite3_unittest_file.dat' 
    pool: 5 
    timeout: 5000 

當我運行rake db:test:load的測試數據庫(這只是一個文件)在rails-root目錄中正確生成。當我運行rake test:units時,一切正常。現在

如果我編輯database.yml設置我DEV數據庫用戶名出了問題(如「sdlkfj」),rake test:units失敗立刻抱怨:

Access denied for user 'sdlkfj'@'myhostnsmae' (using password: YES) 

當我運行此版本的「真正」 ,我在一個系統中運行它,在構建過程中不允許構建對話框。因此,這種嘗試與開發數據庫交談並立即呱呱叫的事情正在讓我失望,而且看起來不正確。

+0

通常,您的測試應該在沒有正在運行的開發數據庫的情況下運行。你應該看一下http://guides.rubyonrails.org/testing.html 3.1節,並改變你的問題,以便你命名你所做的步驟。開始時似乎需要開發數據庫,​​並且您沒有它。 – mliebelt

+0

編輯添加更多信息。 –

回答

7

嘗試用一個明確的環境中運行rake任務:

rake test:units RAILS_ENV=test 

如果不指定環境,假定development,在我的經驗。儘管測試數據庫仍然會獲取插入到其中的燈具數據,但由於某種原因,來自development環境的內容仍會被引用。

+0

工作正常!非常感謝。 –

4

這個失敗的原因是因爲'rake test:units'試圖首先確保測試數據庫安裝正確。爲了做到這一點,它調用了從開發數據庫拷貝當前模式的'rake db:test:prepare'(這是爲了確保在運行測試之前運行所有的遷移)。

我想你可以通過幾種方式解決這個問題,其中一個是覆蓋在這個post的stackoverflow上建議的rake任務「db:test:prepare」。

相關問題