Префикс ваших имен индексов для текущей среды
Вы можете установить разные индексы для каждой среды (в вашем случае: тестовая среда).
Например, вы можете создать инициализатор в
config/initializers/tire.rb
со следующей строкой:
Tire::Model::Search.index_prefix "#{Rails.application.class.parent_name.downcase}_#{Rails.env.to_s.downcase}"
Возможный подход к удалению индексов
Предполагая, что у вас есть модели с именами «Клиент», «Заказ» и «Продукт», поместите следующий код где-нибудь в своем тестовом запуске / перед блоком / каждый запуск блока.
# iterate over the model types
# there are also ways to fetch all model classes of the rails app automaticly, e.g.:
# /535763/est-li-sposob-poluchit-kollektsiy-vseh-modelei-v-vashem-prilozhenii-rails
[Customer, Order, Product].each do |klass|
# make sure that the current model is using tire
if klass.respond_to? :tire
# delete the index for the current model
klass.tire.index.delete
# the mapping definition must get executed again. for that, we reload the model class.
load File.expand_path("../../app/models/#{klass.name.downcase}.rb", __FILE__)
end
end
Альтернативный
Альтернативой может быть установка другого экземпляра ElasticSearch для тестирования на другом порту, скажем, 1234.
В вашем enviornment / test.rb вы можете установить
Tire::Configuration.url "http://localhost:1234"
И в подходящем месте (например, при запуске тестирования) вы можете затем удалить все индексы в экземпляре тестирования ElasticSearch с помощью:
Tire::Configuration.client.delete(Tire::Configuration.url)
Может быть, вы все равно должны убедиться, что ваши определения Tire-Mapping для классов вашей модели все еще вызывают.