2016-07-19 2 views
0

Что мне нужно в основном отправить целевой аргумент и использовать его в моих тестах RSpec, например:как делиться переменной rake в вызываемом ею коде?

$ rake unistall_and_run[test_spec.rb] 

Rakefile:

desc 'uninstall app to run tests' 
    task :uninstall_and_run, [:arg] do |t, arg| 
    #note this, i will explain later 
    start_driver(fullReset: true) 

    oi = arg.to_s.split('"')[1] 
    file_dir = (project_home + '/spec/' + oi) 
    exec "rspeC#{file_dir}" 
    end 

start_driver называется на этой линии, но когда я запускаю тесты (exec "rspec ..."), он вызывается снова, и аргументы, которые я передал, перезаписываются по умолчанию (потому что он находится в конфигурации RSpec).

Что бы я хотел сделать, в моем файле RSpec проверьте, было ли это уже вызвано и не запускается снова.

Вот метод start_driver:

def start_driver(options= {}) if options.empty? capabilities = caps else capabilities = caps(options) end $appium = Appium::Driver.new(caps: capabilities) $browser = $appium.start_driver Appium.promote_appium_methods RSpec::Core::ExampleGroup end

+0

Я надеваю «Не понимаю», что аргументы, которые я передал, перезаписываются по умолчанию ». 'start_driver' не использует' arg'. Вы пытаетесь не запускать 'start_driver', когда он вызывается где-то еще, когда вы запускаете rspec, или пытаетесь передать' arg' в нечто, вызванное rspec? –

+0

Я создал этот метод для получения аргументов: 'def start_driver (options = {}) if options.empty? возможности = колпачки еще Возможности = колпачков (опции) конец $ appium = Appium :: Driver.new (колпачки: возможности) $ браузер = $ appium.start_driver Appium.promote_appium_methods RSpec :: Основной :: ExampleGroup end' – juhlila

ответ

0

Итак, я нашел способ сделать это. Это не очень красиво. Я сохранить файл с аргументами, которые я хочу при запуске грабли:

desc 'uninstall app to run tests' 
     task :uninstall_and_run, [:arg] do |t, arg| 
     send_custom_caps(fullReset: true) 
     oi = arg.to_s.split('"')[1] 
     file_dir = (project_home + '/spec/' + oi) 
     exec "rspeC#{file_dir}" 
     end 

и метод send_custom_caps является:

def send_custom_caps(*opts) 
    file = File.new(custom_caps_file, "w+") 
    File.open(file, 'w') do |f| 
     f.write(opts) 
    end 
    end 

теперь сам (в этом случае, моя спецификация конфигурации) код рубина будет проверять есть пользовательские аргументы до start_driver. Вот мой заказ start_driver метод (который я переименовал):

def start_appium_driver (options= {}) 
    if options.empty? 
     get_caps 
     if $custom_args 
     capabilities = caps($custom_args) 
     else 
     capabilities = caps 
     end 
    else 
     capabilities = caps(options) 
    end 
    $appium = Appium::Driver.new(caps: capabilities) 
    $browser = $appium.start_driver 
    Appium.promote_appium_methods RSpec::Core::ExampleGroup 
    end 

и get_caps

def get_caps 
    if File.exist?(custom_caps_file) #$custom_args 
     file = File.read(custom_caps_file) 
     $custom_args = eval(file) 
     File.delete (custom_caps_file) 
    end 
    $custom_args unless $custom_args.defined? 
    end 

вероятно, это не самое лучшее решение, но это работает хорошо для меня :)