你如何使用规范在ruby中测试带有扩展模块的类

时间:2013-05-16 03:55:39

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 rubygems

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

module A
  def demo_method
    puts 1
  end
end

class B
  extend A
  demo_method
end

2 个答案:

答案 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

在调试级别的日志中,而不是在屏幕上,这些信息可能会更好地用作日志。但我希望有所帮助。