Я вижу проблему в этом утверждении:
данные загружаются, а затем откатываются в транзакции во время типичного теста на огурец, поэтому для think_sphinx нет способа индексировать их
Может быть, не быстро , чтобы думать_сфинкс индексировать результаты, но, безусловно, возможно внутри транзакции Поскольку это один интеграционный тест, и он не выполняется для каждого из ваших (многих) модульных тестов, я бы принял удар по скорости.
Так что теперь вам нужно выяснить, как вызвать этот повторный индекс во время транзакции.
# somewhere in /features/support:
before('@reindexing') do
require 'Rake'
class MyModel
after_save :force_reindex!
def force_reindex!
# in case multiple runs of this block cause the hook
# to get added multiple times, let's check to make sure
# we haven't already reindexed for this save
return if @__reindexed
Rake["thinking_sphinx:rebuild"].execute
@__reindexed = true
end
end
end
after('@reindexing') do
class MyModel
def force_reindex!
# do nothing; the hook still gets called, but that's ok
end
end
end
В /features/integration.feature
(или где-то еще) у вас будет
@reindexing
Feature: The whole shebang, altogether
Scenario: ...