我有一个带有Rspec测试套件的Rails应用程序,它具有一些功能/控制器测试,具体取决于ElasticSearch.
当我们测试系统周围的"搜索"功能(以及依赖于ES的其他功能)时,我们使用真正的ES,当我们运行单个spec文件时,它在开发环境中完美运行.
当套件在我们的CI服务器上运行时,它变得很奇怪,因为有时 ES不会保持同步足够快以使测试成功运行.
我已经搜索了一些在"同步模式"下运行ES的方法,或者等到ES准备好但到目前为止还没找到任何东西.我见过一些使用Ruby的变通方法,sleep但我觉得这是不可接受的.
我怎样才能保证ES同步性来运行我的测试?
你如何在测试套件上处理ES?
这是我的一个测试:
context "given params page or per_page is set", :elasticsearch do
let(:params) { {query: "Resultados", page: 1, per_page: 2} }
before(:each) do
3.times do |n|
Factory(:company, account: user.account, name: "Resultados Digitais #{n}")
end
sync_companies_index # this is a helper method available to all specs
end
it "paginates the results properly" do
get :index, params
expect(assigns[:companies].length).to eq 2
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的RSpec配置块和ES辅助方法:
RSpec.configure do |config|
config.around :each do |example|
if example.metadata[:elasticsearch]
Lead.tire.index.delete …Run Code Online (Sandbox Code Playgroud)