Ваш 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
person
Nick Zadrozny
schedule
07.09.2011