Руководство по поиску переиндексации ассоциаций при тестировании

Я вручную называю 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? если он чувствует себя чище.

Другие вопросы по тегам