Sunspot/RSpec configuration (borrows heavily from https://dzone.com/articles/install-and-test-solrsunspot)
require 'sunspot/rails/spec_helper' | |
require 'net/http' | |
try_server = proc do |uri| | |
begin | |
response = Net::HTTP.get_response uri | |
response.code != "503" | |
rescue Errno::ECONNREFUSED | |
end | |
end | |
start_server = proc do |timeout| | |
server = Sunspot::Rails::Server.new | |
uri = URI.parse("http://0.0.0.0:#{server.port}/solr/default/update?wt=json") | |
try_server[uri] or begin | |
server.start | |
at_exit { server.stop } | |
timeout.times.any? do | |
sleep 1 | |
try_server[uri] | |
end | |
end | |
end | |
original_session = nil # always nil between specs | |
sunspot_server = nil # one server shared by all specs | |
if defined? Spork | |
Spork.prefork do | |
sunspot_server = start_server[60] if Spork.using_spork? | |
end | |
end | |
RSpec.configure do |config| | |
config.before(:each) do |example| | |
if example.metadata[:solr] | |
sunspot_server ||= start_server[60] || raise("SOLR connection timeout") | |
else | |
original_session = Sunspot.session | |
Sunspot.session = Sunspot::Rails::StubSessionProxy.new(original_session) | |
end | |
end | |
config.after(:each) do |example| | |
if example.metadata[:solr] | |
Sunspot.remove_all! | |
else | |
Sunspot.session = original_session | |
end | |
original_session = nil | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment