Thinking sphinx - testy jednostkowe

Sposób testowania wyszukiwania, bazujący na artykule: http://opensoul.org/2009/6/1/cucumber-scenarios-that-depend-on-sphinx
Potrzebujemy gema do czyszczenia bazy, np: database_cleaner, który możemy ustawić w test_helper.rb:

require 'database_cleaner' DatabaseCleaner.strategy = :truncation
Dodatkowo w test_helper.rb tworzymy dwie metody:

[code=ruby] def start_sphinx
@thinking_sphinx = ThinkingSphinx::Configuration.instance
@thinking_sphinx.build
FileUtils.mkdir_p @thinking_sphinx.searchd_file_path
@thinking_sphinx.controller.index
@thinking_sphinx.controller.start
end

def stop_sphinx
@thinking_sphinx.controller.stop
DatabaseCleaner.clean
end[/code]
Teraz możemy testować wyszukiwanie (shoulda):

[code=ruby]require ‘test_helper’
class SearchTest < ActiveSupport::TestCase
self.use_transactional_fixtures = false

context “sphinx search for user” do
setup do
User.create(:name => “John Doe”)
start_sphinx
end
teardown { stop_sphinx }

should "find John Doe" do
  users = User.search "john"
  assert_equal "John Doe", users.first.name
  assert_equal 1, users.size
end

end
end[/code]
Linijka

self.use_transactional_fixtures = false

pozwala uniknąć ostrzeżeń dotyczących transakcji.

W wersji 1.3.2 mamy już klasę testującą.