2017-02-02 139 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 
相關問題