gpt4 book ai didi

ruby-on-rails - 如何在 Rails 应用程序 (Rspec) 中测试 ElasticSearch

转载 作者:行者123 更新时间:2023-11-29 02:42:59 25 4
gpt4 key购买 nike

我想知道您在使用 ElasticSearch 和 Tire 时如何在您的应用程序中测试搜索。

  • 如何设置新的 ElasticSearch 测试实例?有没有办法模拟它?

  • 您知道的任何 gem 可能对此有帮助吗?


一些我觉得有用的东西:

我发现一篇很棒的文章几乎回答了我所有的问题:)

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

此外,还有 Tire 作者 Karmi 的回答。

这也很有用:https://github.com/karmi/tire/wiki/Integration-Testing-Rails-Models-with-Tire

我不敢相信我在问之前没有找到这些......

最佳答案

为当前环境添加索引名称前缀

您可以为每个环境设置不同的索引名称(在您的情况下:测试环境)。

例如,您可以在

中创建一个初始化器
config/initializers/tire.rb

使用以下行:

Tire::Model::Search.index_prefix "#{Rails.application.class.parent_name.downcase}_#{Rails.env.to_s.downcase}"

一种删除索引的可行方法

假设您有名为 Customer、Order 和 Product 的模型,将以下代码放在 test-startup/before-block/each-run-block 的某处。

# iterate over the model types
# there are also ways to fetch all model classes of the rails app automaticly, e.g.:
# http://stackoverflow.com/questions/516579/is-there-a-way-to-get-a-collection-of-all-the-models-in-your-rails-app
[Customer, Order, Product].each do |klass|

# make sure that the current model is using tire
if klass.respond_to? :tire
# delete the index for the current model
klass.tire.index.delete

# the mapping definition must get executed again. for that, we reload the model class.
load File.expand_path("../../app/models/#{klass.name.downcase}.rb", __FILE__)

end
end

备选

另一种方法是设置不同的 ElasticSearch 实例以在另一个端口上进行测试,比方说 1234。在你的 enviornment/test.rb 然后你可以设置

Tire::Configuration.url "http://localhost:1234"

然后在合适的位置(例如您的测试启动),您可以删除 ElasticSearch 测试实例上的所有索引:

Tire::Configuration.client.delete(Tire::Configuration.url)

也许您仍然必须确保您的模型类的 Tire-Mapping 定义仍然被调用。

关于ruby-on-rails - 如何在 Rails 应用程序 (Rspec) 中测试 ElasticSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9676089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com