Ваш before(:all)
, вероятно, просто не дает Solr достаточно времени для начала.
Тем не менее, вы, вероятно, захотите серьезно подумать только о том, что вы просите свои спецификации проверить здесь. Вы можете пройти долгий путь, издавая звонки в Solr с помощью такой библиотеки, как Fakeweb.
Pivotal Labs также имеет библиотеку под названием sunspot_matchers , которая может фиксировать более детальные утверждения о поисках, которые вы вызываете.
Если вы ищете реальные спецификации интеграции с Solr, я советую просто держать тест Solr запущенным во время работы. Такой инструмент, как Foreman , может помочь в управлении вашими процессами Solr. Я мог бы использовать Procfile
как следующее:
solr_dev: rake sunspot:solr:run RAILS_ENV=development
solr_test: rake sunspot:solr:run RAILS_ENV=test
(Разумеется, среда разработки является средой по умолчанию, если RAILS_ENV не предоставлен foreman start
)
Наконец, если вы хотите запустить Solr в рамках своих спецификаций, вы уже на правильном пути. Просто добавьте туда sleep
, чтобы у Solr было достаточно времени для полной загрузки, прежде чем ваши спецификации начнут работать. Не удивляйтесь, если это приведет к непредсказуемым сбоям в вашем наборе спецификаций, когда система находится под нагрузкой.
[Редактировать: Быстрый и грязный before :all
, который использует Sunspot.remove_all
для опроса доступности.]
before :all do
`sunspot-solr start`
begin
Sunspot.remove_all!
rescue Errno::ECONNREFUSED
sleep 1 && retry
end
end