如何在Rails应用程序(Rspec)中测试ElasticSearch

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

  • 如何设置新的ElasticSearch测试实例?有办法嘲笑它吗

  • 你知道有什么宝石可以帮你吗


我发现一些有用的东西:

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

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

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

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

您可以为每个环境设置不同的索引名(在您的示例中为测试环境)

例如,您可以在中创建初始值设定项

config/initializers/tire.rb

使用以下行:

Tire::Model::Search.index_前缀“#{Rails.application.class.parent_name.downcase}#{Rails.env.to_s.downcase}”

删除索引的一种可行方法

假设您有名为Customer、Order和Product的模型,将以下代码放在测试启动/before块/each run块的某处

迭代模型类型
#还有一些方法可以自动获取rails应用程序的所有模型类,例如:
# http://stackoverflow.com/questions/516579/is-there-a-way-to-get-a-collection-of-all-the-models-in-your-rails-app
[客户、订单、产品]。每个人都要|
#确保当前型号使用的是轮胎
如果klass.回应?:轮胎
#删除当前模型的索引
klass.tire.index.delete
#必须再次执行映射定义。为此,我们重新加载模型类。
加载文件.expand_path(“../../app/models/#{klass.name.downcase}.rb”,uu文件)
终止
终止

另类

另一种方法是设置一个不同的ElasticSearch实例,以便在另一个端口(比如1234)上进行测试。
在您的环境/test.rb中,您可以设置

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

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

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

也许您仍然必须确保模型类的轮胎映射定义仍然被调用

发表评论