2012-02-02 5 views
2

Я использую sphinx и думающий сфинкс для поиска данных в моем приложении Ruby on Rails. Итак, у меня есть этот тест, чтобы проверить мою работу:Ruby on Rails - Sphinx не индексирует данные в тестах Rspec

require 'spec_helper' 
require 'thinking_sphinx/test' 

describe SearchesController do 
    render_views 

    #Start search server in test mode 
    before(:all) do 
     ThinkingSphinx::Test.init 
     ThinkingSphinx::Test.start 
    end 

    describe "when signed in" do 
     before(:each) do 
     @user = test_sign_in(Factory(:user)) 
     @micropost = Factory(:micropost, 
           :user => @user, 
           :content => "Test message of user") 
     ThinkingSphinx::Test.index 
     get :find_microposts, :q => @micropost.content      #Sending data (by :q => "Text") 
     end 

     it "should find micropost of user" do 
     response.should have_selector("table.microposts", 
             :content => @micropost.content) 
     end 
    end 
    end 


    #Stop search server in test mode 
    after(:all) do 
     ThinkingSphinx::Test.stop 
    end 
end 

Проблема в том, - ThinkingSphinx::Test.index не работает. Зачем?

sphinx.yml

development: 
    port: 9312 
    ... 

test: 
    port: 9313 
    ... 

Моя система:

Mac OS X 
PostgreSQL 9 
Rails 3.1.3 
Ruby 1.9.3 
Sphinx 2.0.3-release (r3043) 

ответ

5

Вы используете транзакционных светильники с RSpec? Поскольку Sphinx не может получить доступ к записям, которые не сохраняются в базе данных вне контекста RSpec. Кроме того, вы должны позволить четверть или половину секунды после индексации для Sphinx, чтобы догнать индексируемой данные:

sleep(0.25) 

Все, что сказал, я рекомендовал бы гася Сфинкса в тестах контроллера, и только работает Сфинкса в интеграционные тесты (через огурец/капибара или иначе).

+0

Благодарим вас за отзыв 'sleep', это сводило меня с ума. – declan

 Смежные вопросы

  • Нет связанных вопросов^_^