【问题标题】:NameError: undefined local variable or method `desired_preferences'NameError:未定义的局部变量或方法“desired_preferences”
【发布时间】:2012-12-19 12:06:50
【问题描述】:

我创建了一个带有方法的模块

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: undefined local variable or method `desired_preferences'”。我哪里错了?

【问题讨论】:

  • 在module中添加desired_preferences方法后是否重启了服务器??
  • desired_preferences 在哪里调用?你能提供完整的堆栈跟踪吗?
  • 重启服务器??这是一个 Watir/cucumber 应用程序,没有明确的服务器

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


【解决方案1】:

当你在一个类中包含一个模块时,你可以在这个类的实例方法中使用这个方法。您不能在显示来自包含模块的模型的数据的视图中调用包含的方法。对我来说,您似乎只是不在实例方法中使用 desired_preferences 方法。

如果这仍然无法帮助您,请向我们展示您尝试调用该方法的代码。

// Module 的命名不规范。你应该把它命名为module AddingPreferences而不是module Adding_preferences,文件应该命名为adding_preferences.rb然后尝试include AddingPreferences

【讨论】:

  • 我已经包含了调用方法的位置
  • 是类还是实例方法?
  • 能把整个方法贴出来吗?^^
  • 请同时发布包含模块的文件名。
  • 我有上面的模块和我包含模块的类。我试图在黄瓜步骤中调用desired_preferences。我认为它与desired_preferences没有被初始化有关??
【解决方案2】:

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

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

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

World do
  @page = Pages.new
end

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

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

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2016-02-14
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多