Оказывается, Spring использует мой метод прослушивания в wisper (я пишу довольно простой движок).Rails spring wisper метод прослушивания кеширование
Пример:
приложение/модели/myengine/my_class.rb
class Myengine::MyClass
include Wisper::Publisher
def something
# some logic
publish(:after_something, self)
end
end
конфигурации/Инициализаторы/wisper.rb
Wisper.subscribe(Myengine::MyObserver.new)
приложение/наблюдателей/myengine /my_observer.rb
class Myengine::MyObserver
def after_something my_class_instance
# any changes here requires Spring manual restart in order to be reflected in tests
another_method
end
def another_method
# all changes here or in any other class methods works ok with Spring and are instantly visible in tests
return true
end
end
К весне перезапуск Я имею в виду ручное выполнение команды spring stop
, которая действительно раздражает.
Что загадочнее я могу изменить another_method
возвращаемое значение ложно, а затем испытания в противном случае это нормально, но когда я изменяю after_something
тело метода, чтобы сказать return false
это не оказывает никакого влияния на тесты (как тело after_something
как-то кэширован).
Это не проблема с высоким приоритетом, потому что это странное поведение видимо только внутри тела слушателя и легко преодолевается, перемещая всю логику в другой метод в классе. Во всяком случае, это может сбивать с толку (особенно в начале, когда я не знал точной проблемы).
Благодарим за быстрый ответ. В моем случае мне нужно изменить вторую строку на 'Wsper.clear, если Rails.env.development? || Rails.env.test? '. Что касается 'Wisper.clear', я предполагаю, что этого будет достаточно, чтобы добавить его только в основной движок, который будет/должен быть загружен первым. – jmarceli
Да, хорошая точка, если '' Wisper.clear 'добавлен только к первому движку, это должно хорошо работать :) – Kris