我想知道RSpec的是如何实现这一点:还原类/模块的处女状态
是否RSpec的利用define_singleton_method
注入:the_answer
为MyObject
?
这可以工作。让我们假装这是MyObject
样子:
class MyObject
def self.the_answer
21 * 2
end
end
的注入the_answer
方法可能包含这样的事情:
@the_answer_called = true
42
然而,如何RSpec的那么类恢复到unmocked状态?它如何恢复它,以便MyObject.the_answer
“真正”再次返回42? (通过21 * 2
)
由于写这个问题,我认为它没有。在RSpec停止运行之前,类方法仍会被模拟。
但是,(这是问题的症结所在)如何撤销define_singleton_method?
我想会运行old_object = Object.dup
define_singleton_method
之前使用的最简单的方法,但后来,我怎么恢复old_object
到Object
?
当我想要做的就是恢复一个类的方法时,这也不会使我高效。虽然目前这不是问题,但也许在将来我还想保持MyObject
内的某些实例变量不变。是否有非哈希方式复制代码(21 * 2
)并重新定义为the_answer
通过define_singleton_method
而不是完全取代Object
?
所有的想法欢迎,我绝对想知道如何使Object
=== old_object
不管。
您的示例类显示了一个实例方法,而'expect'行和您的大部分问题都是关于类方法的。 –
Neil Slater Thankyou,我纠正了(我认为) – JayTarka