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