如何在它调用的代码中共享一个 rake 变量?
how to share a rake variable in the code it invokes?
我需要的基本上是发送目标参数并在我的 RSpec 测试中使用它,例如:
$ 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
所以,我找到了一种方法。虽然它并不漂亮。当 运行 rake:
时,我用我想要的参数保存了一个文件
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
现在 ruby 代码本身(在本例中是我的规范配置)将检查 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
这可能不是最好的解决方案,但对我来说效果不错:)
我需要的基本上是发送目标参数并在我的 RSpec 测试中使用它,例如:
$ 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
所以,我找到了一种方法。虽然它并不漂亮。当 运行 rake:
时,我用我想要的参数保存了一个文件 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
现在 ruby 代码本身(在本例中是我的规范配置)将检查 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
这可能不是最好的解决方案,但对我来说效果不错:)