黑子和RSpec怎么存根?

Sunspot and RSpec how to stub?

嗨,我一直在努力让它工作,我有一个使用 Sunspot 来搜索模型的控制器,我曾经有一个简单的 sql 语句,并且在我的测试中期望获取对象数组。既然我已经开始实施 Sunspot,我不确定如何进行简单的测试,我想基本上存根,每当该控制器使用搜索方法时,它应该 return 一个对象数组。

你们用过Rspec + Sunspot吗?我可以遵循的任何好的建议,也许我没有正确使用它,

PS。我已经阅读了 https://github.com/sunspot/sunspot/wiki/RSpec-and-Sunspot,它非常简短地介绍了我需要在 Sunspot::Session

处使用 ::Sunspot::Rails::StubSessionProxy.new(::Sunspot.session) class 的行为

我能够通过更仔细地检查 sunspot 的源代码来绕过我的问题,似乎 StubSessionProxy 是一个愚蠢的实现,其中大部分代码都是空方法。首先,我意识到我不应该尝试在 class 中存根 search 方法,而是调用 new_search 方法,其次,因为两个实现 return搜索模块的实例 浴缸真的是这样

allow_any_instance_of(Sunspot::Rails::StubSessionProxy::Search).to receive(:results).and_return(myExpectedResults)

阅读更多https://github.com/sunspot/sunspot/blob/964ecd0ed0a0c949f399d93cba42021c92cf6062/sunspot_rails/lib/sunspot/rails/stub_session_proxy.rb

Sunspot.session = Sunspot::Rails::StubSessionProxy.new(Sunspot.session)

在大多数情况下就足够了,但如果您想要的不止 allow_any_instance_of(Sunspot::Rails::StubSessionProxy::Search).to receive(:results).and_return(myExpectedResults),这个 gem 可能会有所帮助 https://rubygems.org/gems/stub_solr