在步骤定义中,当我尝试在另一个文件中调用模块中定义的方法时,我得到了NoMethodError'。
custom_mod.rb :
module MyMod
def my_method()
puts "Called my_method"
end
end
sd_component.rb:
require 'custom_mod'
When (/^I did something/) do
MyMod.my_method()
end
当我运行它时,我收到了这个错误:
NoMethodError:未定义的方法`my_method'对于MyMod:模块。
有什么想法吗?非常感谢!
答案 0 :(得分:1)
解决此问题的一种方法是将您的模块包含在内:
require 'custom_mod'
include MyMod
When (/^I did something/) do
my_method()
end
答案 1 :(得分:0)
是的,这是一个非常简单的修复,您只需使用def self.my_method()
这是非常基础的Ruby OOP。对于任何模块或类,您需要使用"类方法" (这是self.
所做的)以这种方式调用方法。
将此与实例方法进行比较:
module Foo2
def bar2
'bar2'
end
end
class Foo
include Foo2
def bar
'bar'
end
end
Foo.new.bar # => 'bar'
Foo.new.bar2 # => 'bar2'
请注意,实例方法在模块上的工作方式与类不同。模块实例方法可以混合在一起(将它们作为实例方法加载include
或作为类方法加载extend
)。模块类方法不能以相同的方式用作mixin。