У меня есть приложение, которое было обновлено до версии 4.1.8. Я пытался сделать так, чтобы рельсы «автоматически управляли» моей тестовой схемой... но, несмотря ни на что... я должен вручную подготовить тестовую базу данных. Я использую MiniTest и Fixtures.
Вот мой test_helper.rb
ENV["RAILS_ENV"] = "test"
require File.expand_path("../../config/environment", __FILE__)
require "rails/test_help"
require "minitest/rails/capybara"
require 'minitest/rg'
Capybara.default_driver = :selenium
ActiveRecord::Migration.maintain_test_schema!
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
end
class ActiveSupport::TestCase
fixtures :all
include Sorcery::TestHelpers::Rails
include Sorcery::TestHelpers::Rails::Controller
extend MiniTest::Spec::DSL
# http://blowmage.com/2013/07/08/minitest-spec-rails4
register_spec_type self do |desc|
desc < ActiveRecord::Base if desc.is_a? Class
end
def sample_file(filename = "test_image.png")
File.new("#{Rails.root}/test/#{filename}")
end
end
Важная строка - "ActiveRecord::Migration.maintain_test_schema!"... которая должна автоматически обрабатывать тестовую схему. Однако это не так. Я регулярно извлекаю свою производственную базу данных. После чего... тестовая БД исчезнет... поэтому ее необходимо создать заново.
Если я бегу:
bundle exec rake test
Это не удастся с:
ActiveRecord::NoDatabaseError [...]
Таким образом, тестовая БД не управлялась рельсами автоматически. Потому что... его нет.
Если я запущу команду bundle exec rake db:create, произойдет сбой, потому что база данных разработки уже существует. Если я запускаю пакет exec rake db:migrate, он будет выполняться, но не повлияет на тестовую базу данных.
Если я бегу:
пакет exec rake db:test:prepare
Он будет печатать:
WARNING: db:test:prepare is deprecated. The Rails test helper now maintains your test schema automatically, see the release notes for details.
test:prepare works... Продолжаю свой веселый путь тестирования. Но скоро ... test:prepare будет ... пуф ... пропало.
вопросы
Что мне не хватает? При сбросе и извлечении из производства ... как рельсы узнают, как обращаться с тестовой базой данных? Это обычное явление в мире... как с этим справиться? Что происходит в таких случаях, когда test:prepare удаляется в следующем выпуске рельсов?
Спасибо