2017-02-02 87 views
0

在一个步骤定义中,当我尝试调用另一个文件中某个模块中定义的方法时,出现'NoMethodError'。Ruby Cucumber - 在步骤定义中调用模块的方法

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.

任何想法?非常感谢!

回答

0

是的,这是一个非常简单的修复,你只需要使用def self.my_method()

这是很基本的Ruby的面向对象的东西。无论是模块还是类,都需要使用“类方法”(这就是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。解决这个问题

0

的方法之一是包括你的模块是这样的:

require 'custom_mod' 
include MyMod 
When (/^I did something/) do 
    my_method() 
end 
相关问题