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.