【问题标题】:Searchkick not returning any results in RSpecSearchkick 未在 RSpec 中返回任何结果
【发布时间】:2018-06-20 03:48:48
【问题描述】:

我正在尝试使用使用 Searchkick 的 RSpec 测试一个类。

我的规范支持目录中有以下内容:

RSpec.configure do |config|
  config.before(:suite) do
    # Reindex models
    Restaurant.reindex
    # and disable callbacks
    Searchkick.disable_callbacks
  end

  config.around(:each, search: true) do |example|
    Searchkick.callbacks(true) do
      example.run
    end
  end
end

我的测试看起来像这样:

describe Restaurants::SearchFacade, search: true do
  subject { described_class }

  describe '#search' do
    context 'with a query' do
      let!(:restaurant_1) { create(:restaurant, :reindex, description: 'Amazing sour dough pizza place') }
      let!(:restaurant_2) { create(:restaurant, :reindex) }

      it 'returns values containing the query' do
        Restaurant.search_index.refresh
        params = { search: { query: 'sour dough' } }
        facade = subject.new(params)

        expect(facade.search.total_count).to eq(1)
      end
    end
  end
end

我应该收到 1 个结果。但是,Searchkick 返回 0 个结果。这不是外观的问题,因为我也尝试过使用 Restaurant.search('*'),它应该返回所有结果,但没有返回任何结果。

我的餐厅类如下所示:

class Restaurant < ApplicationRecord
  searchkick searchable: %i[title description street_address]
end

我的工厂看起来像这样:

FactoryBot.define do
  factory :restaurant do
    association :plan
    association :company
    sequence :title do |n|
      "Restaurant #{n}"
    end
    description 'An awesome restaurant'
    # More attributes here...

    trait :reindex do
      after(:create) do |restaurant, _evaluator|
        restaurant.reindex(refresh: true)
      end
    end
  end
end

知道是什么原因造成的吗?任何帮助将非常感激。提前致谢!

【问题讨论】:

  • 你解决过这个问题吗?我遇到了同样的问题。

标签: elasticsearch rspec searchkick


【解决方案1】:

尝试摆脱您在 before(:suite) 和工厂中所做的所有花哨的事情。您只需要在每个规范之前执行此操作(如果设置了搜索标签)。

我能够让 searchkick 与 rspec 一起使用,并且只用我的 spec_helper.rb 中的少量代码来索引我的模型:

RSpec.configure do |config|
   config.before(:each) do |example|
      # Elasticsearch / Searchkick
      if example.metadata[:search]
         Searchkick.enable_callbacks
         Restaurant.reindex
      else
         Searchkick.disable_callbacks
      end
   end
end

旁注:在规范设置中创建一堆餐厅记录后,您可能仍需要运行 Restaurant.search_index.refresh 代码。我不完全确定?

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多