🔍

Meilisearch-RailsをRSpecなどのテストで無効化する

に公開

概要

Meilisearch-RailsをRuby on Railsで使用する場合、Modelに include MeiliSearch::Rails を入れるだけで手軽にModelとMeilisearchの同期が行えます。

しかし、テストデータを作成する際にもCallbackが動いてしまい、不要な場合でも同期が行われてしまうのでテストが遅くなってしまいます。

そこで、この同期を無効化する方法について調べたので記事として残します。

結論

MeiliSearch::Rails.deactivate! を呼びだけでOK

該当のソースコード
https://github.com/meilisearch/meilisearch-rails/blob/v0.16.0/lib/meilisearch/rails/configuration.rb#L14

有効化したい場合は MeiliSearch::Rails.activate! を呼ぶ

該当のソースコード
https://github.com/meilisearch/meilisearch-rails/blob/v0.16.0/lib/meilisearch/rails/configuration.rb#L26

RSpecでの利用

全体的に無効化、任意のテストだけ有効化したい場合は以下の実装でいけます!

rails_helper.rb
RSpec.configure do |config|
  config.before :suite do
    MeiliSearch::Rails.deactivate!
  end

  config.before(:each, search: true) do
    MeiliSearch::Rails.activate!
  end
end

有効化したいテスト

sample_spec.rb
# テスト全体で有効化
RSpec.describe Sample, search: true do
end

# 任意のテストだけ有効化
RSpec.describe Sample do
  context 'hoge', search: true do
  end
end

Discussion