Ruby Cucumber - 在步骤定义中调用模块的方法

时间:2017-02-02 23:03:17

标签: ruby cucumber

在步骤定义中,当我尝试在另一个文件中调用模块中定义的方法时,我得到了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:模块。

有什么想法吗?非常感谢!

2 个答案:

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