Ruby Cucumber - 在步骤定义中调用模块的方法
Ruby Cucumber - call a module's method in step definition
在步骤定义中,当我试图调用另一个文件中模块中定义的方法时,我得到 '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: undefined method `my_method' for MyMod:Module.
有什么想法吗?非常感谢!
是的,这是一个非常简单的修复,您只需使用 def self.my_method()
这是非常基础的 Ruby OOP 内容。对于模块或 classes,您需要使用 "class methods"(这就是 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'
请注意,实例方法在模块上的工作方式与 classes 不同。模块实例方法可以混入(使用 include
加载它们作为实例方法,或者使用 extend
作为 class 方法加载它们)。模块 class 方法不能以相同的方式用作混合。
解决此问题的一种方法是像这样包含您的模块:
require 'custom_mod'
include MyMod
When (/^I did something/) do
my_method()
end
在步骤定义中,当我试图调用另一个文件中模块中定义的方法时,我得到 '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: undefined method `my_method' for MyMod:Module.
有什么想法吗?非常感谢!
是的,这是一个非常简单的修复,您只需使用 def self.my_method()
这是非常基础的 Ruby OOP 内容。对于模块或 classes,您需要使用 "class methods"(这就是 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'
请注意,实例方法在模块上的工作方式与 classes 不同。模块实例方法可以混入(使用 include
加载它们作为实例方法,或者使用 extend
作为 class 方法加载它们)。模块 class 方法不能以相同的方式用作混合。
解决此问题的一种方法是像这样包含您的模块:
require 'custom_mod'
include MyMod
When (/^I did something/) do
my_method()
end