6

想知道是否有方法可以運行Rails測試而不丟失數據庫。我目前只執行單元測試,並使用以下rake命令來執行此操作:rake test:units運行Rails測試而不丟棄測試數據庫

感謝您的幫助!

以防萬一,這是相關的:

  • 的Rails 3
  • 的Ruby 1.8.7(MRI)
  • 在Oracle 11g數據庫
    • 的ActiveRecord-oracle_enhanced適配器

回答

2

在做了一些研究後,我發現沒有辦法做到這一點。即使在Bohdan提供的選項中提供選項時,測試rake任務將始終會丟失數據庫。

通過使用--trace選項,可以證明這一點。下面是輸出:

$ rake test:units TEST=test/unit/post_test.rb --trace 
(in /Users/johnnyicon/Development/ror/test-app) 
** Invoke test:units (first_time) 
** Invoke test:prepare (first_time) 
** Invoke db:test:prepare (first_time) 
** Invoke db:abort_if_pending_migrations (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:abort_if_pending_migrations 
** Execute db:test:prepare 
** Invoke db:test:load (first_time) 
** Invoke db:test:purge (first_time) 
** Invoke environment 
** Execute db:test:purge 
** Execute db:test:load 
** Invoke db:schema:load (first_time) 
** Invoke environment 
** Execute db:schema:load 
** Execute test:prepare 
** Execute test:units 

通過Ruby on Rails Guides for Testing閱讀,它描述了其中的一些rake任務的意思。需要特別注意的是任務,你可以從輸出的最下面看到第7行爲** Execute db:test:load。導遊說這個任務如下:

重新創建從 當前schema.rb測試數據庫

所以,即使我是來執行單元測試逐一博赫丹所暗示的, rake任務仍然會重新創建數據庫。不是我希望的答案,但它不再是問題。

我之所以要求開始的原因是因爲我沒有訪問另一個數據庫用於測試,所以我也使用我的開發數據庫進行測試。但從那以後,我已經能夠獲得另一個專門用於測試的數據庫。

無論如何感謝Bohdan!我感謝幫助!

+1

很高興聽到它。您的測試數據庫*應該*在每次運行測試時被清除,否則您的測試將不準確。 – 2011-11-02 17:37:16

0

難道你不能寫一個自定義Rake任務,猴子修補Rake數據庫:測試:加載任務什麼都不做?

0

對於那些尋找一種方式來跳過Rails的默認行爲,你可以添加以下到您的Rake文件:

Rake::Task["db:test:prepare"].clear 
Rake::Task["db:test:load"].clear 
Rake::Task["db:test:purge"].clear 
+0

這是行不通的! – dariush 2017-05-20 18:25:35

1

在Rails 5(甚至更早的版本),只是註釋掉以下行spec/rails_helper.rb

ActiveRecord::Migration.maintain_test_schema! 

這會阻止rake testrspec試圖刪除您的測試數據庫。您還需要手動運行遷移。