我正在開發一個Rails應用程序與Rspec進行單元測試。在執行'rake spec'時,Rspec會自動將數據庫遷移到最後一個版本,但現在它不會自動執行,我必須爲自己實現一切。MIgrations和Rspec
這發生在測試環境中,因爲我的開發數據不會消失。
是我的錯?我沒有改變任何東西,我想:)
在此先感謝。
我正在開發一個Rails應用程序與Rspec進行單元測試。在執行'rake spec'時,Rspec會自動將數據庫遷移到最後一個版本,但現在它不會自動執行,我必須爲自己實現一切。MIgrations和Rspec
這發生在測試環境中,因爲我的開發數據不會消失。
是我的錯?我沒有改變任何東西,我想:)
在此先感謝。
通常,我所做的是使用運行遷移和準備測試數據庫的別名命令。
rake db:migrate && rake db:test:prepare
在你的.bashrc只是創建一個alias命令一樣,當您需要做,然後運行migrate_databases。
alias migrate_databases='rake db:migrate && rake db:test:prepare'
我更喜歡解決問題而不是隱藏它,但謝謝。 順便說一句,對不起一個月後回答:) – pablorc 2010-07-28 08:51:57
這裏是我的解決方法:
Rake文件:
require File.expand_path('../config/application', __FILE__)
require 'rake'
require "rspec/core/rake_task"
MyApp::Application.load_tasks
desc "Run specs"
RSpec::Core::RakeTask.new(:spec)
task :run_specs => ['db:test:clone', :spec] do
end
task :default => :run_specs
然後我跑$耙run_specs
由於某種原因,默認的任務並非默認run_specs
我Rails 4解決方案:
在spec/spec_helper.rb
或測試環境的初始化代碼的任何地方:
# Automigrate if needs migration
if ActiveRecord::Migrator.needs_migration?
ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db/migrate'))
end
UPD:作爲敬請國鉦在評論中指出的那樣,你並不需要,如果有任何未決遷移分別檢查,因爲ActiveRecord::Migrator.migrate
已經在幕後做這件事。所以你可以有效地使用這一行:
ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db/migrate'))
看看你是否在你的spec_helper.rb中有以下內容?每次運行規格時,RSpec都會檢查是否有掛起的遷移。
#Checks for pending migrations before tests are run.
#If you are not using ActiveRecord, you can remove this line.
ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
即使沒有加載Rails,並且大部分時間只執行一次SQL查詢,它也能正常工作。
if defined?(ActiveRecord::Migrator)
ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db', 'migrate'))
end
的Rails 4.1前鋒可以使用:
ActiveRecord::Migration.maintain_test_schema!
添加在您的spec_helper.rb
或rails_helper.rb
的頂部,你是好去。 More info here。
有這個,它不會工作=) – 2016-01-30 10:52:09
你能給我一些細節,如何它不工作?它會拋出某種錯誤嗎?您可能需要確保您的遷移以開發模式運行,以便它能夠正常工作。 – lobati 2016-01-30 17:36:30
當我創建一個新的遷移並運行rspec時,它會引發錯誤 – 2016-01-30 19:01:18
當您嘗試執行「rake spec」時,是否收到任何錯誤? – StevenMcD 2010-05-24 17:55:03
如果我生成遷移,則會出現「您有未決遷移」。此時我必須自己遷移數據庫,然後重新運行「rake spec」 – pablorc 2010-05-25 07:29:38