【问题标题】:Testing searchkick with RSpec使用 RSpec 测试 searchkick
【发布时间】:2014-02-16 17:05:41
【问题描述】:

我想在我的实践管理应用中创建用于搜索患者的功能规范。

到目前为止,我已经在网上搜索并遵循了以下建议的解决方案:

http://bitsandbit.es/post/11295134047/unit-testing-with-tire-and-elastic-search#disqus_thread

https://github.com/karmi/tire/wiki/Integration-Testing-Rails-Models-with-Tire

这两篇文章都建议在 spec_helper.rb 中配置 ElasticSearch 和 Tire。由于 Searchkick 是基于轮胎的,因此我将解决方案应用于 Patient 类,这是我使用 Searchkick 的唯一模型。

但是,对于每个配置,我都会收到“NoMEthodError”。 例如,使用以下代码:

spec_helper.rb

RSpec.configure do |config| do
  .
  .
  .

  config.before :each do
    Patient.index.delete
    Patient.create_elasticsearch_index
  end

  config.before :all do
   Patient.index_name('test' + Patient.model_name.plural)
  end
end

我收到以下错误:

Failure/Error: Unable to find matching line from backtrace
 NoMethodError:
   undefined method `index_name' 

“index”和“create_elasticsearch_index”方法也是如此

我对 RoR 相当陌生,老实说,我不确定我在这里做错了什么,除了可能假设我可以在 Searchkick 上使用轮胎解决方案。因此,非常感谢任何帮助!

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    Searchkick 需要更好的测试文档,但要点如下:

    Searchkick 在每个环境中自动使用不同的索引名称,因此无需进行任何设置。在控制台中运行Patient.searchkick_index.name 以确认这一点。

    您可以调用reindex,而不是删除和重新创建索引。

    RSpec.configure do |config| do
      config.before :each do
        Patient.reindex
      end
    end
    

    最后,插入数据后,在调用Patient.search之前调用Patient.searchkick_index.refresh。这告诉 Elasticsearch 立即更新索引(而不是在刷新间隔之后,默认为 1 秒)。

    【讨论】:

    • 太棒了!!!你绝对是救命稻草 :D 非常感谢宝石,因为它为我节省了设置 ElasticSearch 的大量时间。
    • @andrew-kane,我似乎只有在使用 let! 在我的规范中插入我的数据后才能让我的 rspec 正常工作,我只是在 before 块中调用 Model.reindex。如果我调用 Model.searchkick_index.refresh,则不会插入数据。我可以在应用程序中验证插入数据后索引是否易于搜索。我没有做任何特别的事情(即没有异步或批量)。
    【解决方案2】:

    即使 Searchkick 是基于轮胎的,但这并不意味着轮胎方法在您的模型上可用。请参阅https://github.com/ankane/searchkick 了解有关 可用方法的文档。请参阅 https://github.com/ankane/searchkick#migrating-from-tire 小节,特别是使用 Searchkick 和使用 Tire 之间的对比。

    【讨论】:

    • 感谢您的提示 :) 我研究了您提供的链接。我看到在 Searchkick 中仍然使用 index_name 方法,但是以 'searchkick index_name: 'new_index_name'' 的形式,而不是直接调用类上的方法。如果答案似乎让我无法理解,我深表歉意。但是,我的问题是在测试环境的上下文中,而不是在 searchkick 文档中提供的类模型上。
    • 对不起,我不明白你的评论。测试环境上下文与您如何使用 API 有什么关系?
    • 是的,最后一句话听起来确实令人困惑。我基本上是在寻找关于如何在 RSpec 上设置它的测试文档。 searchkick 的创建者在下面发布了解决方案。但是感谢您的帮助,仍然! :D
    猜你喜欢
    • 2014-05-14
    • 2014-08-16
    • 2017-06-28
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多