2016-07-19 1 views
0

Ce que je dois est d'envoyer essentiellement un argument cible et l'utiliser dans mes tests RSpec, par exemple:comment partager une variable rake dans le code invoqué?

$ 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 est appelée sur cette ligne, mais quand je lance les essais (exec "rspec ..."), il est appelé à nouveau et les args que j'ai passés sont écrasés par défaut (car c'est sur RSpec config).

Ce que je voudrais faire est, sur mon fichier RSpec vérifier si elle était déjà appelée et ne pas courir encore.

Voici la méthode 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

Je don "Je ne comprends pas" les args que j'ai passés sont écrasés par défaut ". 'start_driver' n'utilise pas' arg'. Essayez-vous de ne pas lancer 'start_driver' lorsqu'il est appelé ailleurs quand vous lancez rspec, ou essayez-vous de passer' arg' dans quelque chose appelé par rspec? –

+0

J'ai créé cette méthode pour recevoir des arguments: 'def start_driver (options = {}) if options.empty? capacités = CAPS autre capacités = caps (options) fin $ appium = Appium :: Driver.new (caps: capacités) navigateur $ = $ appium.start_driver Appium.promote_appium_methods RSpec :: :: Noyau ExampleGroup fin » – juhlila

Répondre

0

Alors, je l'ai trouvé un moyen de le faire. Ce n'est pas beau cependant. Enregistrer un fichier avec les args que je veux quand râteau course:

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 

et la méthode send_custom_caps est:

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

maintenant le code Ruby lui-même (dans ce cas, ma config spec) vérifiera si il y a des arguments personnalisés avant start_driver. Voici ma méthode personnalisée start_driver (que je changé de nom):

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 

et 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 

probablement ce n'est pas la meilleure solution, mais il fonctionne bien pour moi :)