在 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'] }
需要一些东西,可以像下面这样工作以保持 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'] }