elasticsearch,tire,Ruby On Rails,Ruby On Rails 3,Rspec,elasticsearch,Tire" /> elasticsearch,tire,Ruby On Rails,Ruby On Rails 3,Rspec,elasticsearch,Tire" />

Ruby on rails 弹性搜索+;轮胎:模仿ES的好策略

Ruby on rails 弹性搜索+;轮胎:模仿ES的好策略,ruby-on-rails,ruby-on-rails-3,rspec,elasticsearch,tire,Ruby On Rails,Ruby On Rails 3,Rspec,elasticsearch,Tire,我在我的网站主页上使用ElasticSearch。在我的验收测试中,当用户登录时,他会被重定向到主页 但是在测试中使用ES是昂贵的(需要创建和删除索引),所以我不想每次用户浏览主页时都这样做 我只想在测试有一些元数据时执行实际的ES搜索: config.before(:each) do if example.metadata[:elastic] Model.create_elasticsearch_index end end scenario "Results

我在我的网站主页上使用ElasticSearch。在我的验收测试中,当用户登录时,他会被重定向到主页

但是在测试中使用ES是昂贵的(需要创建和删除索引),所以我不想每次用户浏览主页时都这样做

我只想在测试有一些元数据时执行实际的ES搜索:

config.before(:each) do
    if example.metadata[:elastic]
        Model.create_elasticsearch_index
    end
end

scenario "Results should be ordered by distance", :elastic do
    # tests...
end
因此,当测试没有弹性元数据时,我需要“模拟”搜索,而不使用ES

实现这一点的好方法是什么?

我可能会使用它来选择性地启用和禁用实时HTTP调用

要模拟对ES的调用,请执行以下操作:

FakeWeb.allow_net_connect = false
FakeWeb.register_uri(:any, %r|\Ahttp://localhost:9200|, :body => "{}")
FakeWeb.clean_registry
FakeWeb.allow_net_connect = true
要允许呼叫ES,请执行以下操作:

FakeWeb.allow_net_connect = false
FakeWeb.register_uri(:any, %r|\Ahttp://localhost:9200|, :body => "{}")
FakeWeb.clean_registry
FakeWeb.allow_net_connect = true
这里并不严格要求允许和禁止网络连接,因为FakeWeb的模拟比实际调用具有更高的优先级,但我发现,当某些东西发出未经修改的HTTP调用时,在测试中抛出异常会有所帮助

您可能可以在此基础上进行扩展,根据需要使用测试元数据来启用或禁用模拟