2012-09-11 32 views
1

我已閱讀帖子,指出這是由於交易裝置,但它看起來像我們沒有使用這些。我讀過其他文章,這表明我在每次測試運行前做了一些時髦的停頓,重新啓動和重新編排。這似乎沒有幫助。ThinkingSphinx在RSpec中不起作用

ThinkingSphinx在應用程序中運行得很好,但在測試中表現得非常奇怪。在我的規範中創建了幾個Organization模型後,我運行了一個sphinx搜索。它有我期待的兩個記錄,但也有很多nils。這很煩人,但我添加了一個: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>] 

但現在,如果我試圖通過名字,這是在我的模型最肯定索引搜索,我不要拿我的紀錄。

(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'。我的模型還索引status字段,該字段設置爲modified,並且它索引address關聯的state字段。該值爲'CA',所以我認爲也許ThinkingSphinx正在找到該索引的記錄。所以我想我會嘗試搜索'CA',並猜測發生了什麼:

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

沒什麼!這種無知的行爲是什麼?好吧,你們可能想看到一些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

我們在測試單元中寫了Thinking Spec測試。它工作得很好。 包括在你的規格以下/ spec_helper.rb

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

此外,在每個測試中,有ThinkingSphinx :: Test.start在設置和ThinkingSphinx :: Test.stop在拆卸

+0

謝謝,這結果是一些耙子任務確實是有序的。看起來我每次清理數據庫並加載新數據時都必須運行'rake ts:index RAILS_ENV = test'。 – Samo

相關問題