事实证明,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)
app/observers/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
返回值更改为 false,然后测试失败,这没关系,但是当我更改after_something
方法主体以说它return false
对测试没有任何影响时(就像以after_something
某种方式缓存的主体)。
这不是高优先级问题,因为这种奇怪的行为仅在侦听器方法体内可见,并且通过将所有逻辑移动到类中的另一个方法很容易克服。无论如何,它可能会令人困惑(尤其是在我不知道确切问题的开始时)。