Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在Rspec中从命令行传递散列参数_Ruby_Selenium Webdriver_Rspec_Automated Tests_Capybara - Fatal编程技术网

Ruby 在Rspec中从命令行传递散列参数

Ruby 在Rspec中从命令行传递散列参数,ruby,selenium-webdriver,rspec,automated-tests,capybara,Ruby,Selenium Webdriver,Rspec,Automated Tests,Capybara,需要一些东西,可以按以下方式保持rspec干燥: rspec spec/features/users_spec.rb:12 -fd tab: 'Home' 使用 ruby 1.9.3 rspec 2.6.4 Rails 3.1.6 gem 'capybara', '2.1.0' gem 'selenium-webdriver', '2.43.0' 实际上,我有多个“it_Behavior_like”超过50个具有相同重复代码的多个组合,如下所示 下面是一个基本的例子来解释我的问题: desc

需要一些东西,可以按以下方式保持rspec干燥:

rspec spec/features/users_spec.rb:12 -fd tab: 'Home'
使用

ruby 1.9.3
rspec 2.6.4
Rails 3.1.6
gem 'capybara', '2.1.0'
gem 'selenium-webdriver', '2.43.0'
实际上,我有多个“it_Behavior_like”超过50个具有相同重复代码的多个组合,如下所示

下面是一个基本的例子来解释我的问题:

describe 'Login' do

  primary_admin = { acc_type: 'admin', user_type: 'primary' }
  secondary_admin = { acc_type: 'admin', user_type: 'secondary' }
  primary_admin = { acc_type: 'non-admin', user_type: 'primary' }
  secondary_admin = { acc_type: 'non-admin', user_type: 'secondary' }

  tab = { tab: 'Home' }

  it_behaves_like 'Authorized User', primary_admin.merge(tab)
  it_behaves_like 'Authorized User', secondary_admin.merge(tab)
  it_behaves_like 'Authorized User', primary_admin.merge(tab)
  it_behaves_like 'Authorized User', secondary_admin.merge(tab)

  tab = { tab: 'My Profile' }

  it_behaves_like 'Authorized User', primary_admin.merge(tab)
  it_behaves_like 'Authorized User', secondary_admin.merge(tab)
  it_behaves_like 'Authorized User', primary_admin.merge(tab)
  it_behaves_like 'Authorized User', secondary_admin.merge(tab)

  tab = { tab: 'Security' }

  it_behaves_like 'Authorized User', primary_admin.merge(tab)
  it_behaves_like 'Authorized User', secondary_admin.merge(tab)
  it_behaves_like 'Authorized User', primary_admin.merge(tab)
  it_behaves_like 'Authorized User', secondary_admin.merge(tab)

end
对于多个选项卡,将需要重复上述相同的代码

如果可能的话,我想从控制台传递'tab'参数。如果有可能,请提供建议,或以任何其他方式减少此重复代码

注意:我希望将这些测试套件保存在上述不同的部分,以便在需要时使用行号轻松选择所需测试套件。

您可以使用env vars

env TAB=home rspec spec/features/users_spec.rb:12
然后,在代码中

tab = { tab: ENV['TAB'] }
您可以使用环境变量

env TAB=home rspec spec/features/users_spec.rb:12
然后,在代码中

tab = { tab: ENV['TAB'] }

我测试了
FOO=bar irb
,但它没有启动。我需要使用命令。如果你不介意的话,我会编辑你的问题。我想这是因为我使用的是Fish shell(它在Bash中工作),但无论如何,我认为使用
env
rspec spec/features/users\u spec.rb:12 TAB=home
不起作用?@Sergioturentsev如果我传递了3个env变量,它就起作用了,但无法使用行号执行特定案例。电子邮件=t@example.com'FLOW=two_stage TAB=home rspec spec/features/users_spec.rb:18-fdI-tested
FOO=bar-irb
,它不会启动。我需要使用命令。如果你不介意的话,我会编辑你的问题。我想这是因为我使用的是Fish shell(它在Bash中工作),但无论如何,我认为使用
env
rspec spec/features/users\u spec.rb:12 TAB=home
不起作用?@Sergioturentsev如果我传递了3个env变量,它就起作用了,但无法使用行号执行特定案例。电子邮件=t@example.com'FLOW=two_stage TAB=home rspec spec/features/users_spec.rb:18-fd如果您通过env传递TAB,则不再需要这三个部分是的,但该选项卡的特定情况不能通过作为第一个目标的行号来执行。这就是我在注释中提到的原因。如果您通过env传递tab,您不再需要这三个部分是的,但是该tab的具体情况不能通过作为第一个目标的行号来执行。这就是我在便条中提到它的原因。