2010-11-10 88 views
0

當我通過rake運行任何rspec任務時,數據庫似乎被刪除和遷移,但是如果我通過script/spec path/to/spec運行它們,它不會'噸。有沒有我可以設置的選項,以便rake規格不會觸及數據庫?「rake spec」每次都遷移數據庫

回答

1

它不應該運行任何遷移,只會將db/schema.rb導入到您的測試數據庫中。這是預期的行爲,因此您的測試在運行之前使用數據庫模式的全新副本。你不想刷新測試數據庫的理由是什麼?

+0

有沒有辦法禁用?無論出於何種原因,該項目的開發人員決定不使用rails migrations來管理數據庫,因此導入schema.rb不是有效的選項。 – AdamB 2010-11-10 04:06:55

+0

如果您有rspec.rake任務,請查找包含db:test的行:準備並註釋掉它。這應該防止它嘗試加載模式。沒有模式,你打算如何構建測試數據庫? – 2010-11-10 04:40:01

+0

這個伎倆,謝謝! – AdamB 2010-11-10 18:34:19

1

對於我所做的事我想永久關閉它。所以使用RSpec 2.5.0和軌道3:

複製rspec.rake到您的應用程序/ lib目錄/文件夾任務從:

~/.rvm/gems/ruby-1.8.7-p302/gems/rspec-rails-2.5.0/lib/rspec/rails/tasks/rspec.rake 

這個添加到文件的頂部:

Rake::TaskManager.class_eval do 
    def remove_task(task_name) 
     @tasks.delete(task_name.to_s) 
    end 
    end 
    def remove_task(task_name) 
    Rake.application.remove_task(task_name) 
    end 
    remove_task 'spec' 

查找和編輯此行強制空操作:

spec_prereq = :noop #Rails.configuration.generators.options[:rails][:orm] == :active_record ? "db:test:prepare" : :noop 
0

我在命令行中運行rspec的時候也有過同樣的問題。在我的情況下,我正在處理一個沒有遷移的遺留數據庫,所以測試會失敗,因爲遷移無法運行。

的解決方案是編輯規範/ spec_helper.rb文件並刪除以下行:

ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration) 

之後的測試運行,沒有失敗。