2017-01-19 4 views
-2

Der lokale Variablenwert des Moduls in einem .rb kann nicht in eine andere .rb-Datei konvertiert werden. Ich versuche, driverDetailsMap Variablenwert von setup.rb in Scriptrunner.rb Datei zu bekommen. Aber ich habe immer das Problem als undefinierte Methode `driverDetailsMap 'für Setup: Module (NoMethodError).So erhalten Sie eine lokale Variable zwischen dem Ruby-Skript

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

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

Bitte im Voraus Hilfe ..

+0

Warum brauchen Sie die lokale Variable? Was genau willst du testen? – Dbz

+0

Außerdem befindet sich Ihr Code nicht in einem Test. Es gibt keine Beschreibung, keinen Zusammenhang oder Blockaden. Stellen Sie sicher, dass Sie Ihren Test ausgespült haben, bevor Sie erklären, dass er nicht funktioniert. Umfang ist wichtig. Uns ist es wichtig, zu verstehen, was Sie tatsächlich testen möchten - Tests sind Dokumentation, und Ihnen fehlt die Dokumentation! – Dbz

+0

Ich möchte die Treiberinstanz von einem Ruby-Skript zu einem anderen Skript freigeben. Wenn es sich um lokale oder globale Variable handelt. – Thangaraj

Antwort

0

$driverDetailsMap ist die globale Variable.

Um eine Instanz-Variable auf Setup Klasse zu haben, könnte man tun:

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

    ... 
end 

Und es später Zugang mit

Setup.driver_details_map 

Bitte beachten Sie, dass ich den Namen der Variablen, die Schlange Fall korrigiert rubinartigen Richtlinien entsprechen.

+0

Jetzt bekomme ich leere Werte wie {} – Thangaraj

+0

Mein Szenario ist total anders, Am renne es von unten angegebene Rake-Datei. Befehl als Rake alle .......... Aufgabe: testCase1 => ["spec1: Setup"] do ENV ["RAKE_CALL"] = "false" Rake :: Aufgabe ["spec: test1 "] .invoke ('Device1', 'testcase1') Ende Aufgabe: testCase2 => [" spec1: Setup "] do ENV [" RAKE_CALL "] =" false " Rake :: Aufgabe [" spec: test2 "] .invoke ('Device2', 'testcase2') Ende Multitask: all => [" testCase1 "," testCase2 "] – Thangaraj

+0

Zu meinem Verständnis habe ich zuerst die Variable driver_details_map initialisiert. Erneut erfordert 'Setup.rb' in scriptrunner.rb setzt den Wert der Variablen driver_details_map zurück. Wie bekomme ich driver_details_map ohne 'Setup.rb' in scriptrunner.rb Datei – Thangaraj

Verwandte Themen