2017-02-02 12 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

はい、それはあなただけ。これは非常に基本的なRubyのOOPのものであるdef self.my_method()

を使用し、非常に簡単な修正です。モジュールまたはクラスのいずれかを使用して、このようにしてメソッドを呼び出すための "クラスメソッド"(つまり、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でロードできます)。モジュールクラスメソッドは、同じ方法でミックスインとして使用することはできません。この問題を解決するために

0

一つの方法は、このようなあなたのモジュールを含めることです。

require 'custom_mod' 
include MyMod 
When (/^I did something/) do 
    my_method() 
end 
関連する問題