2012-09-11 5 views
1

나는 이것들이 거래 용 설비에 의한 것이라는 내용의 게시물을 읽었지만 그것들을 사용하지 않는 것 같습니다. 필자는 각 테스트를 실행하기 전에 펑키 한 멈추기, 다시 시작하기, 다시 색인하기를 제안하는 다른 글을 읽었습니다. 그건 도움이되지 않는 것 같습니다.ThinkingSphinx가 RSpec에서 작동하지 않습니다

ThinkingSphinx은 앱에서 정상적으로 실행되지만 테스트에서 매우 이상하게 작동합니다. 내 사양에 Organization 두 개의 모델을 만든 후 스핑크스 검색을 실행합니다. 그것은 내가 기대하고있는 두 가지 기록을 가지고 있지만 또한 많은 닐들을 가지고 있습니다. 즉 짜증나,하지만 난 :retry_stale => true를 추가하고 그 멀리 가고, 그래서이 첫 번째 쿼리에 만족 해요 :

(rdb:1) p Organization.search '', :retry_stale => true 
[#<Organization id: 1, ein: nil, name: "Allina", created_at: "2012-09-11 15:03:04", updated_at: "2012-09-11 15:03:04", parent_id: nil, main_phone: "7867685187x894", fax: nil, email: nil, url: nil, crm_id: 1, target_market: false, notes: nil, form990_notes: nil, mec_revenue: 750000.0, legacy_id: nil, teaching_program_type_id: nil, sponsorship_type_id: nil, is_member_council_teaching_hospitals: nil, has_teaching_program: nil, is_major_academic_medical_center: nil, does_participate_in_survey: nil, status: "modified", net_revenue: nil, gross_revenue: nil, source_name: nil, source_id: nil, import_concat_key: nil, bigtime_id: nil, is_non_hc: nil, is_client: nil, contact_record_id: nil, form990_legacy_id: nil, number_of_beds: nil, tax_exempt_status: nil, delta: true>, #<Organization id: 2, ein: nil, name: "HealthPartners", created_at: "2012-09-11 15:03:04", updated_at: "2012-09-11 15:03:04", parent_id: nil, main_phone: "3407862693x0935", fax: nil, email: nil, url: nil, crm_id: 1, target_market: false, notes: nil, form990_notes: nil, mec_revenue: nil, legacy_id: nil, teaching_program_type_id: nil, sponsorship_type_id: nil, is_member_council_teaching_hospitals: nil, has_teaching_program: nil, is_major_academic_medical_center: nil, does_participate_in_survey: nil, status: "modified", net_revenue: nil, gross_revenue: nil, source_name: nil, source_id: nil, import_concat_key: nil, bigtime_id: nil, is_non_hc: nil, is_client: nil, contact_record_id: nil, form990_legacy_id: nil, number_of_beds: nil, tax_exempt_status: nil, delta: true>] 

하지만 지금은 가장 확실히 내 모델에 인덱싱 이름으로 검색하려고하면, I 내 기록을 가져 오지 마.

(rdb:1) p Organization.search 'Allina', :retry_stale => true 
[] 

옵션을 사용하지 않으려 고 시도 했으므로 별표 모드에서 한 글자를 검색하려고했습니다. 결과는 혼란 스럽습니다.

(rdb:1) p Organization.search 'C', :star => true, :retry_stale => true 
[#<Organization id: 1, ein: nil, name: "Allina", created_at: "2012-09-11 15:03:04", updated_at: "2012-09-11 15:03:04", parent_id: nil, main_phone: "7867685187x894", fax: nil, email: nil, url: nil, crm_id: 1, target_market: false, notes: nil, form990_notes: nil, mec_revenue: 750000.0, legacy_id: nil, teaching_program_type_id: nil, sponsorship_type_id: nil, is_member_council_teaching_hospitals: nil, has_teaching_program: nil, is_major_academic_medical_center: nil, does_participate_in_survey: nil, status: "modified", net_revenue: nil, gross_revenue: nil, source_name: nil, source_id: nil, import_concat_key: nil, bigtime_id: nil, is_non_hc: nil, is_client: nil, contact_record_id: nil, form990_legacy_id: nil, number_of_beds: nil, tax_exempt_status: nil, delta: true>] 

name 필드에는 분명히 문자 'C'가 없습니다. 내 모델은 또한 modified으로 설정된 status 필드를 인덱싱하고 연관의 state 필드를 인덱싱합니다. 그 값은 'CA'입니다. 그래서 나는 ThinkingSphinx이 그 색인으로 그 레코드를 찾고 있다고 생각했습니다. 그래서 나는 'CA'를 검색하려고 시도했는데 무슨 일이 일어 났을 지 추측했다.

Nothing! 이 불안정한 행동은 무엇입니까? 좋아, 너희들은 아마 CONFIGS 및 사양 도우미와 일부 인덱스 정의보고 싶어 :

설정/sphinx.yml

development: 
    enable_star: 1 
    min_infix_len: 1 

test: 
    enable_star: 1 
    min_infix_len: 1 

사양/spec_helper.rb을

Spork.prefork do 
    require 'headless' 

    headless = Headless.new(:display => 99) 
    headless.start 
    at_exit do 
    headless.destroy 
    end 

    ENV["RAILS_ENV"] ||= 'test' 
    require File.expand_path("../../config/environment", __FILE__) 
    require 'rspec/rails' 
    require 'capybara/rspec' 
    require 'database_cleaner' 

    #require 'rspec/autorun' 
    Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 
    RSpec.configure do |config| 
    config.use_transactional_fixtures = false 
    config.treat_symbols_as_metadata_keys_with_true_values = true 
    config.infer_base_class_for_anonymous_controllers = false 

    config.include Devise::TestHelpers, :type => :controller 
    config.extend ControllerMacros, :type => :controller 
    config.include Warden::Test::Helpers, :type => :request 
    config.include FactoryGirl::Syntax::Methods 

    config.before(:suite) do 
     DatabaseCleaner.strategy = :truncation, { 
     :except => %w(sponsorship_types teaching_program_types title_groups positions tax_exempt_organization_types)} 
    end 

    config.before(:each) do 
     DatabaseCleaner.start 
    end 

    config.after(:each) do 
     DatabaseCleaner.clean 
    end 
    end 
end 

Spork.each_run do 
end 

응용 프로그램/모델/organization.rb

define_index do 
    indexes :name, :sortable => true 
    indexes address(:state), :as => :state 
    indexes status 

    set_property :delta => true 
    end 

답변

5

우리는 Test Unit에서 Thinking Spec 테스트를 작성했습니다. 그것은 꽤 잘 작동했습니다. 는 분해에

+0

감사 설정에 ThinkingSphinx :: Test.start 및 ThinkingSphinx :: Test.stop을 가지고, 각 시험에서 또한/spec_helper.rb

require 'thinking_sphinx/test' ThinkingSphinx::Test.init 

, 귀하의 사양에 다음을 포함, 그것은 일부 레이크 작업이 실제로 순서대로 진행됩니다. DB를 정리하고 새 데이터를로드 할 때마다'rake ts : index RAILS_ENV = test'를 실행해야합니다. – Samo

관련 문제