Руководство по поиску переиндексации ассоциаций при тестировании
Я вручную называю re index для ассоциаций, чтобы они были современными, как предписано документами.
ОДНАКО, в моей тестовой среде вызовы переиндексации выдают ошибку. На CI ошибка понятный порт 9200 не работает, так как ES не работает. Локально ошибка выглядит примерно так, показывая, что документ не существует.
Я прописал Searchkick.disable_callbacks
в моем test_helper
Настроить:
class Parent < ApplicationRecord
belongs_to :client
searchkick
def search_data
{ name }.merge(**client_data)
end
def client_data
{ market_id: client.market_id }
end
end
class Client < ApplicationRecord
has_many :parents
after_save :reindex_parents
def reindex_parents
parents.reindex(:client_data) # <-- ERROR raised here without `unless Rails.env.test?` guard
end
end
Ошибка:
TestClass#test_name:
Searchkick::ImportError: {"type"=>"document_missing_exception", "reason"=>"[model][395824130]: document missing", "index_uuid"=>"5UOKtvfvR52x76Nf5njMBQ", "shard"=>"0", "index"=>"students_test"} on item with id '395824130' ....
Я могу избежать этой проблемы, охраняя reindex_parents
позвонить с unless Rails.env.test?
но похоже, что должен быть лучший способ
Я что-то пропустил? Есть идеи?
1 ответ
Поскольку обратные вызовы отключены, поисковый индекс не будет иметь никаких данных. когда reindex_parents
пытается обновить документ, который не существует, выдается ошибка. Вместо unless Rails.env.test?
, ты можешь использовать if Searchkick.callbacks?
если он чувствует себя чище.