Open
Description
Hi there,
Can someone help me and confirm my approach or provide an actual (version 7.x) example how to setup a rSpec
-environment for elasticsearch-rails (7.1.1)
correctly? I am using Rails 6.1.x
and rSpec 3.1.x
.
I have doubt if my request tests are setup correctly, or if there is a better approach:
I saw examples with a Product.import
and sleep 2
in specs, as well some real complex methods in the spec_helper.rb/rails_helper.rb file.
Currently I have this, it looks slim and works (till now):
rails_helper.rb
# pass 'elasticsearch: true' or ':elasticsearch' to your tests to run this code
config.around(:each, elasticsearch: true) do |example|
Product.__elasticsearch__.create_index!(force: true)
Product.import
Product.__elasticsearch__.refresh_index!
example.run
Product.__elasticsearch__.client.indices.delete index: Product.index_name
end
config.after(:suite) do
Elasticsearch::Model.client.indices.delete(index: '_all')
end
product_request_spec.rb
describe "by_name" do
before(:each) do
target = Fabricate :product, { name: term }
Fabricate.times(3, :product)
# Product.import(force: true) # sometimes it looks I have to use that
end
it 'respond with a pagination' do
post "/search/by_name/#{term}"
expect(response.body).to have_json_path("data")
end
end
Other approaches
product_request_spec.rb
approach a.) (does not work always)
before(:each) do
Product.__elasticsearch__.create_index! force: true
Fabricate :product
Product.__elasticsearch__.client.indices.refresh
end
approach b.) Works but very slow if test amount raise
before(:each) do
Product.__elasticsearch__.create_index! force: true
Fabricate :product
Product.import(force: true)
sleep 2 # but slowing down hundred of tests is not my favorite.
end
(maybe the docs can supplied with such an example... )
Thank you in advance