RspecでElasticsearchのデータのimportを楽にするヘルパー

別に大した話じゃないんだけれど、これもメモ。
Elasticsearchのindexを作って、データをインポートします。
その際に、スコープを渡せるようにしてあります。
インポート後にindexをリフレッシュするので、即テストが可能です。

def elasticsearch_import_data(model_klass, scope=nil)
  model_klass.__elasticsearch__.create_index!(force: true)
  model_klass.import(query: scope)
  model_klass.__elasticsearch__.refresh_index!
end

使い方はこう。

describe Shop, type: :model do
  before do
    pref = Pref.create(name: '岡山県')
   Shop.create!(name: "Shop A", yomigana: 'ショップエー', pref: pref)
   Shop.create!(name: "Shop B", yomigana: 'ショップビー', pref: pref)
    elasticsearch_import_data(Shop, -> { eager_load(:pref) })
  end
  # テストを書く
end

importでスコープが渡せるので、Elasticsearchにデータを取り込む時にN+1問題が発生しなくて済みます。


カテゴリー Ruby, Ruby on Rails | タグ   | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です