NameError:未定义的局部变量或方法`desired_preferences'

时间:2012-12-19 12:06:51

标签: ruby-on-rails ruby cucumber watir watir-webdriver

我用方法

创建了一个模块
module Adding_preferences
  def desired_preferences            
    @preference = %w(motabilitySpecialist newCars bodyshop filter8 filter7).each do |selection|            
      @browser.label(:for,  selection ).click    
    end
  end
end

我已将此模块包含在一个类中:

class Pages
  include Adding_preferences

  attr_accessor :browser, :preference

  def initialize
    @browser = Watir::Browser.new :ff
  end
end

World do
  Pages.new
end

我在Cucumber场景中调用此方法

When /^I select a desired preference$/ do
  desired_preferences
end

但是在运行时我收到一个错误," NameError:未定义的局部变量或方法`desired_preferences'"。我哪里错了?

2 个答案:

答案 0 :(得分:1)

将类模块包含到类中时,可以在此类的实例方法中使用此方法。您无法在视图中调用包含的方法,该方法显示包含模块的模型中的数据。对我来说,看起来你只是在实例方法中不使用desired_preferences方法。

请告诉我们您尝试调用该方法的代码的安静性,如果这仍然无法帮助您。

//模块的命名不是传统的。您应该将其称为module AddingPreferences,而不是module Adding_preferences,该文件应命名为adding_preferences.rb,然后尝试include AddingPreferences

答案 1 :(得分:0)

您最好花一些时间熟悉Ruby的类/模块/对象/方法继承模型,因为您构建代码的方式有一点点有点凌乱。

然而,一个简单的尝试(并且我不能保证它能够完美地工作)是以下修改:

将实例化的Pages类分配给类实例变量:

World do
  @page = Pages.new
end

...然后在步骤定义中使用该实例变量...

When /^I select a desired preference$/ do
  @page.desired_preferences
end

我希望有所帮助!