我在一个调用thinking_sphinx的search()方法的模型中有一个类方法。我需要检查这个类方法。
我想在我的rspec测试用例中启动,索引或停止sphinx。我正在尝试使用这段代码。
before(:all) do
ThinkingSphinx::Test.start
end
after(:all) do
ThinkingSphinx::Test.stop
end
并在我触发搜索查询之前在每个测试用例中使用此代码
ThinkingSphinx::Test.index
但是在我触发搜索查询之后,它仍然给出了空结果,尽管测试数据库中存在完全匹配。
如果您将rspec与thinking_sphinx一起使用
,请引导我使用代码示例答案 0 :(得分:12)
在David发布后,我们最终得到以下解决方案:
#spec/support/sphinx_environment.rb
require 'thinking_sphinx/test'
def sphinx_environment(*tables, &block)
obj = self
begin
before(:all) do
obj.use_transactional_fixtures = false
DatabaseCleaner.strategy = :truncation, {:only => tables}
ThinkingSphinx::Test.create_indexes_folder
ThinkingSphinx::Test.start
end
before(:each) do
DatabaseCleaner.start
end
after(:each) do
DatabaseCleaner.clean
end
yield
ensure
after(:all) do
ThinkingSphinx::Test.stop
DatabaseCleaner.strategy = :transaction
obj.use_transactional_fixtures = true
end
end
end
#Test
require 'spec_helper'
require 'support/sphinx_environment'
describe "Super Mega Test" do
sphinx_environment :users do
it "Should dance" do
ThinkingSphinx::Test.index
User.last.should be_happy
end
end
end
它将指定的表切换为:截断策略,然后将它们切换回:trasaction strategy。
答案 1 :(得分:4)
这是由于交易灯具。
虽然ActiveRecord可以在单个事务中运行其所有操作,但Sphinx无权访问,因此索引不包括您的事务更改。
您必须停用您的交易设备。
在你的rspec_helper.rb中
RSpec.configure do |config|
config.use_transactional_fixtures = false
end
全局禁用。
请参阅Turn off transactional fixtures for one spec with RSpec 2