Другой вариант - использовать адаптер sqlite3 и запустить базу данных в памяти, а также использовать DatabaseCleaner, чтобы избавиться от записей после теста.
У этого подхода есть определенные преимущества:
- Вы можете увидеть SQL в тесте, который упрощает процесс оптимизации запросов
- Это близко к "реальным" примерам
С другой стороны, я должен сказать этоэто немного грязно, потому что это немного долго, но не стесняйтесь реструктурировать его;)
Вот краткое описание, что вам нужно для этого:
# in Gemfile
gem "activerecord" #since you are dealing with activerecord
gem "database_cleaner", :group => :test
gem "sqlite3", :group => :test
Я используюследующий подход, чтобы сохранить вещь, но вы можете иметь ее по-другому:
# in RAILS_ROOT/test/support/active_record.rb
require 'logger'
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3", :database => ':memory:'
)
#this line will print the SQL queries right into console
ActiveRecord::Base.logger = Logger.new(STDOUT)
# in RAILS_ROOT/test/support/database_cleaner.rb
require 'database_cleaner'
DatabaseCleaner.strategy = :truncation
# or DatabaseCleaner.strategy = :trunsaction (it is up to you)
module OrmSetup
def before_setup
DatabaseCleaner.start
end
def after_teardown
DatabaseCleaner.clean
end
end
# in RAILS_ROOT/test/test_helper.rb
...
require File.expand_path("support/active_record", File.dirname(__FILE__))
require File.expand_path("support/database_cleaner", File.dirname(__FILE__))
class Test::Unit::TestCase
include OrmSetup
end
И теперь в вашем тесте вы можете получить что-то вроде
require 'test_helper'
class User < ActiveRecord::Base
end
class MyFancyTest < Test::Unit::TestCase
def setup
before_setup
end
def teardown
after_teardown
end
end