elasticsearch Searchkick在RSpec中不返回任何结果
我正在尝试用RSpec测试一个类,它使用Searchkick 我的规范支持目录中有以下内容:
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.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
旁注:在规范设置中创建一组餐厅记录后,您可能仍然需要运行
餐厅。搜索索引。刷新代码。我不完全确定?你解决过这个问题吗?我遇到了同样的问题。