1

我永远找不到这个用例的明确答案,如果这是重复的,我深表歉意。在下面的示例中,是否有一种干净的方法可以使用 rspec 测试 B 类中的方法是否被调用?

module A
  def demo_method
    puts 1
  end
end

class B
  extend A
  demo_method
end
4

2 回答 2

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

这些信息最好在调试级别的日志中提供,而不是在屏幕上。但我希望这会有所帮助。

于 2013-05-16T12:25:21.853 回答
1

首先将您的方法名称修改method为该demo_method名称是敏感的。

然后

B.should respond_to :demo_method
# => true
于 2013-05-16T05:24:38.817 回答