想知道是否有方法可以運行Rails測試而不丟失數據庫。我目前只執行單元測試,並使用以下rake命令來執行此操作:rake test:units
。運行Rails測試而不丟棄測試數據庫
感謝您的幫助!
以防萬一,這是相關的:
- 的Rails 3
- 的Ruby 1.8.7(MRI)
- 在Oracle 11g數據庫
- 的ActiveRecord-oracle_enhanced適配器
想知道是否有方法可以運行Rails測試而不丟失數據庫。我目前只執行單元測試,並使用以下rake命令來執行此操作:rake test:units
。運行Rails測試而不丟棄測試數據庫
感謝您的幫助!
以防萬一,這是相關的:
在做了一些研究後,我發現沒有辦法做到這一點。即使在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!我感謝幫助!
難道你不能寫一個自定義Rake任務,猴子修補Rake數據庫:測試:加載任務什麼都不做?
這是一個比較舊的文章,做的壓倒一切的清洗/負載任務猴子補丁: http://www.pervasivecode.com/blog/2007/09/22/making-rails-raketest-not-drop-your-pgsql-database/
相似的答案可以在這裏找到:http://stackoverflow.com/q/24785428/680464 ----和這裏:http://stackoverflow.com/q/8112074/680464 – juanitogan 2014-09-29 20:04:56
對於那些尋找一種方式來跳過Rails的默認行爲,你可以添加以下到您的Rake文件:
Rake::Task["db:test:prepare"].clear
Rake::Task["db:test:load"].clear
Rake::Task["db:test:purge"].clear
這是行不通的! – dariush 2017-05-20 18:25:35
在Rails 5(甚至更早的版本),只是註釋掉以下行spec/rails_helper.rb
:
ActiveRecord::Migration.maintain_test_schema!
這會阻止rake test
或rspec
試圖刪除您的測試數據庫。您還需要手動運行遷移。
很高興聽到它。您的測試數據庫*應該*在每次運行測試時被清除,否則您的測試將不準確。 – 2011-11-02 17:37:16