我永远无法找到这个用例的明确答案,如果这是重复,我道歉。在下面的示例中,是否有一种干净的方法来测试使用rspec调用类B中的方法?
module A
def demo_method
puts 1
end
end
class B
extend A
demo_method
end
答案 0 :(得分:1)
首先将您的方法名称method
修改为demo_method
,因为该名称是敏感的。
然后
B.should respond_to :demo_method
# => true
答案 1 :(得分:1)
如果您确实需要知道B类正在调用方法,则可以使用caller
方法。它会显示堆栈。
您将获得此类型的堆栈输出:
$: ruby
how-do-you-test-a-class-with-an-extended-module-in-ruby-with-spec.rb
how-do-you-test-a-class-with-an-extended-module-in-ruby-with-spec.rb:10:in
`<class:B>'
how-do-you-test-a-class-with-an-extended-module-in-ruby-with-spec.rb:8:in `<main>' 1
how-do-you-test-a-class-with-an-extended-module-in-ruby-with-spec.rb:14:in
`<main>' 1
您只需输出caller
module A
def demo_method
puts caller
puts 1
end
end
class B
extend A
demo_method
end
puts B::demo_method
在调试级别的日志中,而不是在屏幕上,这些信息可能会更好地用作日志。但我希望有所帮助。