2017-01-19 2 views
-2

Невозможно получить локальное значение переменной модуля в одном .rb в другой файл .rb. Я пытаюсь получить значение переменной driverDetailsMap из файла setup.rb в файле Scriptrunner.rb. Но я всегда получал проблему как неопределенный метод `driverDetailsMap 'для Setup: Module (NoMethodError).Как получить локальную переменную между ruby ​​script

setup.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 <<<<<<<<<<<<<<<<<<<<<<<<<<" 

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

Пожалуйста, помогите заранее ..

+0

Зачем вам нужна локальная переменная? Что именно вы хотите проверить? – Dbz

+0

Кроме того, ваш код не находится в рамках теста. Нет описания, контекста и блоков. Удостоверьтесь, что ваш тест вымыли, прежде чем объявить, что он не работает. Сфера важна. Наше понимание того, что вы на самом деле пытаетесь проверить, тоже важно - тесты - это документация, и вам не хватает документации! – Dbz

+0

Я хочу поделиться экземпляром драйвера с одного скрипта ruby ​​на другой скрипт. Если это может быть локальная или глобальная переменная. – Thangaraj

ответ

0

$driverDetailsMap является глобальная переменная.

Чтобы иметь переменную экземпляра на Setup класса, можно было бы сделать:

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

    ... 
end 

а позже доступ к нему с

Setup.driver_details_map 

Обратите внимание, что я исправил имя переменной змеиного случае для соответствия рубиновым правилам.

+0

Теперь я получаю пустые значения, такие как {} – Thangaraj

+0

Мой сценарий совершенно другой, я запускаю его из приведенного ниже файла рейка. команда как Rake all .......... Задача: 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') end multitask: all => [" testCase1 "," testCase2 "] – Thangaraj

+0

В моем понимании, Сначала я инициализировал переменную driver_details_map. Снова требуется «Setup.rb» в scriptrunner.rb сбрасывает значение переменной driver_details_map. Как получить driver_details_map без запроса «Setup.rb» в файле scriptrunner.rb – Thangaraj

Смежные вопросы