我想知道在使用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)
也许您仍然必须确保模型类的轮胎映射定义仍然被调用