遇到一种情况,根据工作,我想将部分代码包装在 if_enable block 中,但有条件。
如果我们正在运行表征作业,那么我们会根据测试代码对测试进行分区,以减少实验的测试时间。对于任何其他作业,这些测试总是为了生产测试而运行。
原始代码的格式是这样的:
Flow.create() do |options|
test_a
test_b
end
我当前解决此问题的解决方案是:
def a_tests
if job == :charz
if_enable '$enableA' do
yield
end
else
yield
end
end
def b_tests
if job == :charz
if_enable '$enableB' do
yield
end
else
yield
end
end
Flow.create() do |options|
a_tests do
test_a
end
b_tests do
test_b
end
end
我想做的是这样的:
Flow.create() do |options|
a_flag = job == :charz ? '$enableA' : ''
b_flag = job == :charz ? '$enableB' : ''
if_enable a_flag do
test_a
end
if_enable b_flag do
test_b
end
end
如果传递一个空值(或者可能是 nil 或 false),将导致 if_enable block 内的测试仍然生成,但不会被任何变量检查所控制。此功能是否已经存在于某个地方,或者我当前的解决方案是目前最好的方法?或者还有其他更清洁的 ruby 解决方案吗?
最佳答案
使用现有 API 的一种纯粹流级解决方案是在运行时强制启用非 cz 作业,如下所示:
Flow.create do |options|
if job != :charz
enable '$enableA'
enable '$enableB'
end
if_enable '$enableA' do
test_a
end
if_enable '$enableB' do
test_b
end
end
您当前的解决方案也非常好,尽管我会通过将方法定义移动到您的界面并使其更加通用来增强它:
# lib/my_app/my_interface.rb
def if_enable_when_charz(var)
if job == :charz
if_enable var do
yield
end
else
yield
end
end
那么你就有了一个很好的 helper 来保持你的流程逻辑非常干净:
# program/my_flow.rb
Flow.create do |options|
if_enable_when_charz '$enableA' do
test_a
end
if_enable_when_charz '$enableB' do
test_b
end
end
关于origen-sdk - 有没有办法将 if_enable 配置为始终通过或有条件地删除变量检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56586668/