Руководство переиндексации Searchkick по ассоциациям во время тестирования - PullRequest
0 голосов
/ 03 мая 2018

Я вручную вызываю re index для ассоциаций, чтобы они были актуальными, как предписано docs .

ОДНАКО, в моей среде тестирования вызовы переиндексации выдают ошибку. На 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 Ответ

0 голосов
/ 09 августа 2018

Поскольку обратные вызовы отключены, поисковый индекс не будет иметь никаких данных. Когда reindex_parents пытается обновить документ, который не существует, выдается ошибка. Вместо unless Rails.env.test? вы можете использовать if Searchkick.callbacks?, если чувствуете себя чище.

...