Sunspot и RSpec как заглушить?

Привет, я пытался заставить это работать, у меня есть контроллер, который использует Sunspot для поиска по модели, раньше у меня был простой оператор sql с лайками, и в моем тесте я ожидал получить массив объектов. Теперь, когда я начал внедрять Sunspot, я не уверен, как заставить простой тест работать, я хочу в основном заглушить, что всякий раз, когда этот контроллер использует метод поиска, он должен возвращать массив объектов.

Вы, ребята, используете Rspec + Sunspot? Любой хороший совет, которому я могу следовать по этому поводу, может быть, я не использую его должным образом,

PS. Я прочитал https://github.com/sunspot/sunspot/wiki/RSpec-and-Sunspot, и довольно кратко об этом действии мне нужно использовать ::Sunspot::Rails::StubSessionProxy.new(::Sunspot.session) класс на Sunspot::Session


person Necronet    schedule 27.05.2016    source источник


Ответы (2)


Мне удалось обойти мою проблему, более внимательно изучив исходный код sunspot. Кажется, что StubSessionProxy — это глупая реализация с большей частью кода пустого метода. Во-первых, я понимаю, что мне не следует пытаться заглушить метод search внутри этого класса, а вместо этого вызывать метод new_search, а во-вторых, поскольку обе реализации возвращают экземпляр модуля поиска, ванна была действительно такой

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

person Necronet    schedule 28.05.2016

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

достаточно для большинства случаев, но если вы хотите больше, чем allow_any_instance_of(Sunspot::Rails::StubSessionProxy::Search).to receive(:results).and_return(myExpectedResults), этот гем может быть полезен https://rubygems.org/gems/stub_solr

person Jaigouk    schedule 14.09.2016