我永远找不到这个用例的明确答案,如果这是重复的,我深表歉意。在下面的示例中,是否有一种干净的方法可以使用 rspec 测试 B 类中的方法是否被调用?
module A
def demo_method
puts 1
end
end
class B
extend A
demo_method
end
我永远找不到这个用例的明确答案,如果这是重复的,我深表歉意。在下面的示例中,是否有一种干净的方法可以使用 rspec 测试 B 类中的方法是否被调用?
module A
def demo_method
puts 1
end
end
class B
extend A
demo_method
end
如果你真的需要知道类 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
这些信息最好在调试级别的日志中提供,而不是在屏幕上。但我希望这会有所帮助。
首先将您的方法名称修改method
为该demo_method
名称是敏感的。
然后
B.should respond_to :demo_method
# => true