簡體   English   中英

如何在測試之前阻止rspec刪除測試數據庫

[英]How to stop rspec from dropping the test database before tests

我有兩個使用相同數據庫的Rails應用程序。 一個應用程序通過遷移管理數據庫,但另一個應用程序只是訪問它。

出於某種原因,當我在不管理數據庫的應用程序中使用RSpec運行測試時,它會在運行測試之前刪除數據庫。 但由於此應用程序不知道如何重新創建數據庫,因此所有測試都將失敗。

如何告訴RSpec不要丟棄數據庫,只是按原樣使用它?

如果您不需要遷移數據庫,則可以重新定義rspecs-rails spec:prepare任務,如下所示:

lib/tasks/patch_rspec_rails.rb

Rake::Task["spec:prepare"].clear
namespace :spec do
  task :prepare do
    ENV['RACK_ENV'] = ENV['RAILS_ENV'] = 'test'
  end 
end

原始spec:prepare任務調用test:prepare ,設置db。

任務test:prepareRails 4.0 (或可能更早)以來存在。 此任務也存在於Rails 5.0中。 這是一個用於添加依賴於測試的設置的軌道的鈎子。 您可以使用rake -W test:prepare檢查其定義rake -W test:prepare 任務被擊中你可以檢查rake --trace spec

ActiveRecord使用此任務來檢查遷移狀態並設置db。

如果未調用此任務,則不會刪除或創建任何數據庫。

但請注意,當其他一些寶石使用test:prepare作為一個鈎子插入測試,它將無法正常工作。

編輯:

從Rails 4.1開始,您可以在config/environments/test.rb設置config.active_record.maintain_test_schema = false 這樣Rails就不應該再嘗試遷移您的測試模式。

理想情況下,RSpec應重新初始化數據庫以進行測試,以確保您的環境處於可靠,可預測的狀態。

你可以做的是為沒有管理數據庫的Rails應用程序執行rake db:schema:dump來生成schema.rb然后由RSpec使用 - 當然要確保你的database.yml測試配置沒有指向您的實時數據庫。

我知道這在技術上不是你問題的解決方案,但它應該防止導致你的測試失敗的潛在問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM