【问题标题】:ElasticSearch + Tire: good strategy to mock ESElasticSearch + Tire:模拟 ES 的好策略
【发布时间】:2012-05-11 08:22:38
【问题描述】:

我在我的网站主页上使用 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

因此,当测试没有 :elastic 元数据时,我需要“模拟”搜索而不使用 ES。

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec elasticsearch tire


    【解决方案1】:

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

    模拟对 ES 的调用:

    FakeWeb.allow_net_connect = false
    FakeWeb.register_uri(:any, %r|\Ahttp://localhost:9200|, :body => "{}")
    

    允许调用 ES:

    FakeWeb.clean_registry
    FakeWeb.allow_net_connect = true
    

    这里没有严格要求允许和禁止网络连接,因为 FakeWeb 的模拟比实际调用优先,但我发现当某些东西进行非模拟 HTTP 调用时,它有助于在测试中抛出异常。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      相关资源
      最近更新 更多