在 Rspec 中从命令行传递哈希参数

Passing hash arguments from command line in Rspec

需要一些东西,可以像下面这样工作以保持 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_behaves_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 TAB=home rspec spec/features/users_spec.rb:12

然后,在您的代码中

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