Ruby on rails rails 4 rspec太阳黑子solr测试间歇性失败
让我们为这个问题做准备 这是我们的模型:Ruby on rails rails 4 rspec太阳黑子solr测试间歇性失败,ruby-on-rails,ruby,solr,rspec,Ruby On Rails,Ruby,Solr,Rspec,让我们为这个问题做准备 这是我们的模型: class Deal < ActiveRecord::Base belongs_to :retailer has_many :content_locations, as: :locatable has_many :stores, through: :content_locations searchable do text :title text :store_name text :store_sort_na
class Deal < ActiveRecord::Base
belongs_to :retailer
has_many :content_locations, as: :locatable
has_many :stores, through: :content_locations
searchable do
text :title
text :store_name
text :store_sort_name
text :description
end
scope :by_keyword, ->(keyword, limit, offset) {
search {
fulltext keyword
paginate offset: offset, per_page: limit
}.results
}
end
我们看到的是,我们的测试随机失败。我可以一次又一次地成功执行该测试1-3次,但第4次将失败,或者它将失败4次,第5次将失败。这种模式是完全随机的。正如您所见,我们尝试将睡眠添加到此设置中,但这只会减慢速度
任何提示都将不胜感激。这让我们快发疯了 他们一直在打电话
Sunspot.commit
在数据创建之后和任何检查之前
更新:
您还可以调用model.index代码>,它将立即将特定模型同步到solr索引中。在一个特定的例子中,我还必须在保存之后和索引之前调用model.reload
,因为一些标记关系附加到模型(但是这是特定于标记的)
我们决定走一个完全不同的方向,老实说,我不建议任何阅读本文的人实时点击SOLR。这是一种痛苦
我们的最终解决方案是用gem代替。我想你也试着睡1秒钟以上。会花很长时间去尝试。保存到Solr是异步的,它只是嗅到了异步问题。我曾经检查过“轮胎”测试套件(ElasticSearchGem),看看他们是如何处理的。他们没有任何测试来检查真实数据。只是检查查询是否正确生成。有点道理。为什么要检查solr是否正常工作?如果您也可以依赖solr gem,只需通过模拟来检查deal_by_关键字是否使用正确的参数调用。睡眠计时器没有更改输出:(我也在考虑这种方法,但希望确保与SOLR的交互工作正常。嗯……我喜欢这种情况,但我们在功能规格?想法?更新答案方面存在问题。我们在功能(集成)中使用model.index!
)规格现在。然而,我认为这只是因为我们在模型上有这些标记关系。它们只有在模型之后才能正确加载。重新加载。拥有太阳黑子。提交只会导致侧面通过规格。我们最终采用了与您发布的方法类似的方法,所以我给您评分,但是,我们有了一个新问题。会吗你有没有偶然发现的?
Sunspot.commit
#simple
Factory.create(:model).tap { |m| m.index! }
#advanced
model = Factory.build :model_with_relationships
model.save
model.reload #optional
model.index!