elasticsearch Searchkick在RSpec中不返回任何结果,elasticsearch,rspec,searchkick,elasticsearch,Rspec,Searchkick" /> elasticsearch Searchkick在RSpec中不返回任何结果,elasticsearch,rspec,searchkick,elasticsearch,Rspec,Searchkick" />

elasticsearch Searchkick在RSpec中不返回任何结果

elasticsearch Searchkick在RSpec中不返回任何结果,elasticsearch,rspec,searchkick,elasticsearch,Rspec,Searchkick,我正在尝试用RSpec测试一个类,它使用Searchkick 我的规范支持目录中有以下内容: RSpec.configure do |config| config.before(:suite) do # Reindex models Restaurant.reindex # and disable callbacks Searchkick.disable_callbacks end config.around(:each, search: true)

我正在尝试用RSpec测试一个类,它使用Searchkick

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

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
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
我应该收到一个结果。但是,Searchkick返回0个结果。这不是facade的问题,因为我也尝试了
Restaurant.search('*')
,它应该会返回所有结果,但不会返回任何结果

我的餐厅课是这样的:

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
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

你知道这是什么原因吗?任何帮助都将不胜感激。提前谢谢

试着把你在以前的(:套房)和工厂里做的那些花哨的东西都扔掉。您只需要在每个规范之前执行此操作(如果设置了搜索标记)

我在spec_helper.rb中只使用了少量代码就可以让searchkick与rspec一起工作并为我的模型建立索引:

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

旁注:在规范设置中创建一组餐厅记录后,您可能仍然需要运行
餐厅。搜索索引。刷新
代码。我不完全确定?

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