【问题标题】:How to get local variable between ruby script如何在ruby脚本之间获取局部变量
【发布时间】:2017-01-19 09:23:30
【问题描述】:

无法将一个 .rb 中的模块的局部变量值获取到另一个 .rb 文件中。我试图从 setup.rb 获取 driverDetailsMap 变量值到 Scriptrunner.rb 文件中。但是我总是遇到问题,因为 Setup:Module (NoMethodError) 的未定义方法“driverDetailsMap”。

设置.rb

require "selenium-webdriver"
require "rspec"
require 'spreadsheet'

  module Setup

    if ENV["RAKE_CALL"] == "true"   
        $driverDetailsMap = Hash.new
        inputMap = Hash.new
        workbook = Spreadsheet.open 'src/config/Config.xls'

        deviceConfigSheet = workbook.worksheet 'DeviceConfig'
        totalColumnCount = deviceConfigSheet.column_count
        startingColumn = 1  

        while startingColumn <= totalColumnCount-1

          deviceConfigSheet.each do |row|
            inputMap[row[0]] = row[startingColumn]
          end

          if inputMap.[]('PLATFORM_NAME') == 'Web-Firefox'
            driver = Selenium::WebDriver.for :firefox
            base_url = inputMap.[]('DRIVER_URL')
            accept_next_alert = true
            driver.manage.timeouts.implicit_wait = 30
            driver.manage.window.maximize
            driver.get(base_url + "/")
          end

             driverDetailsMap[inputMap.[]('DEVICE_IDENTIFIER')] = driver
            startingColumn += 1
        end
      end
end

ScriptRunner.rb

require "rspec"
require 'spreadsheet'
#require 'setup'
require File.dirname(__FILE__) + '/setup.rb'
#include Setup

 puts Setup::driverDetailsMap
 puts "TESTING <<<<<<<<<<<<<<<<<<<<<<<<<<"

..................

请提前帮忙..

【问题讨论】:

  • 为什么需要局部变量?你到底想测试什么?
  • 另外,您的代码不在测试中。没有描述,上下文,也没有阻塞。在宣布它不工作之前,请确保您已将您的测试冲掉。范围很重要。我们了解您实际尝试测试的内容也很重要 - 测试是文档,而您缺少文档!
  • 我想将驱动程序实例从一个 ruby​​ 脚本共享到另一个脚本。如果是可能是局部或全局变量。

标签: ruby rspec


【解决方案1】:

$driverDetailsMap全局变量

要在Setup 类上有一个实例变量,可以这样做:

class Setup
  @driver_details_map = Hash.new
  class << self
    attr_reader :driver_details_map
  end

  ...
end

然后使用

访问它
Setup.driver_details_map

请注意,我已将变量名称更正为蛇形大小写以符合 ruby​​ 样式指南。

【讨论】:

  • 现在得到像 {} 这样的空值
  • 我的场景完全不同,我从下面的 Rake 文件中运行它。命令作为 Rake all .... task:testCase1 => ["spec1:setup"] do ENV["RAKE_CALL"] = "false" Rake::Task["spec:test1"].invoke ('Device1', 'testcase1') end task:testCase2 => ["spec1:setup"] do ENV["RAKE_CALL"] = "false" Rake::Task["spec:test2"].invoke('Device2' , 'testcase2') 结束多任务 :all => ["testCase1", "testCase2"]
  • 据我了解,首先我已经初始化了 driver_details_map 变量。再次要求 scriptrunner.rb 中的“Setup.rb”重置 driver_details_map 变量值。如何在 scriptrunner.rb 文件中获取 driver_details_map 而无需“Setup.rb”
  • 您所说的问题(“无法将一个 .rb 中的模块的局部变量值获取到另一个 .rb 文件中。”)在上面得到了完美的回答。无论您有任何其他问题,请随时通过 SO 上每个页面左上角的“”按钮打开新问题。
猜你喜欢
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
  • 2011-08-06
  • 2011-01-09
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多