Миграции и Rspec - PullRequest
       10

Миграции и Rspec

9 голосов
/ 24 мая 2010

Я разрабатываю приложение Rails с Rspec для модульного тестирования.

Несколько недель назад Rspec раньше автоматически выполнял миграцию базы данных до последней версии при выполнении 'rake spec', но теперь он не делает это автоматически, я должен все реализовать самостоятельно.* Это происходит в тестовой среде, потому что мои данные разработки не исчезают.

Это моя ошибка?Я ничего не изменил, я думаю:)

Заранее спасибо.

Ответы [ 6 ]

18 голосов
/ 03 июня 2010

Обычно я использую команду псевдонимов, которая выполняет миграцию и готовит тестовую базу данных.

rake db:migrate && rake db:test:prepare

В вашем .bashrc просто создайте команду псевдонима, как это, и затем запустите migrate_databases, когда вам нужно.

alias migrate_databases='rake db:migrate && rake db:test:prepare'
9 голосов
/ 11 марта 2014

Мое решение для 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'))
7 голосов
/ 15 января 2015

Rails 4.1 forward вы можете использовать:

ActiveRecord::Migration.maintain_test_schema!

Добавьте наверху вашего spec_helper.rb или rails_helper.rb и все готово. Подробнее здесь .

1 голос
/ 14 апреля 2011

Вот мой обходной путь:

Rakefile:

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

Затем я запускаю $ rake run_specs

по какой-то причине задание по умолчанию не по умолчанию равно run_specs

0 голосов
/ 02 октября 2014

Это работает, даже если Rails не загружен и большую часть времени выполняет только один SQL-запрос.

if defined?(ActiveRecord::Migrator)
  ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db', 'migrate'))
end
0 голосов
/ 29 сентября 2014

Посмотрите, есть ли у вас следующее в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...