我正在与Origen test_ids gem 'next in range' feature合作。当我在测试界面中设置softbin配置时,我会动态地找出有多少不同的硬盘有一个独特的softbin范围。这是已知的,但根据所测试的测试模块而有所不同。一些测试模块可能有3个hardbin到softbin组合,有些有5个。是否可以将Proc / Lambda传递给下面显示的softbin配置?
config.softbins needs: :bin do |options|
if options[:bin] == 1
TestIds.next_in_range((1000..2000))
elsif options[:bin] == 11
TestIds.next_in_range((10000..99999))
end
end
这样elsif
语句的数量,bin和softbin范围都是动态拼接在一起的。我知道eval
可以工作,但似乎不赞成。
修改
好的,在回顾了Ginty的答案之后我尝试了解决方案,但似乎这些选项没有传递到next_in_range
方法。这是配置:
TestIds.configure current_test_insertion do |config|
config.bins.include << binning_obj.configs(:all).hbin
config.softbins needs: :bin do |options|
bin_map = Hash[test_type_hardbins.zip(binning_test_types)]
TestIds.next_in_range(bin_map[options[:bin]])
end
config.send_to_ate = false
end
这是错误:
COMPLETE CALL STACK
-------------------
wrong number of arguments (given 1, expected 2)
/users/user/origen/github/test_ids/lib/test_ids.rb:236:in `next_in_range'
当我传递选项时:
TestIds.next_in_range(bin_map[options[:bin]], options)
我收到此错误:
COMPLETE CALL STACK
-------------------
undefined method `map' for nil:NilClass
Did you mean? tap
/users/user/origen/github/test_ids/lib/test_ids/allocator.rb:45:in `range_item'
/users/user/origen/github/test_ids/lib/test_ids/allocator.rb:32:in `next_in_range'
鉴于docs say this feature is in beta,我应该将其转移到Github问题吗?
THX
答案 0 :(得分:1)
当使用块定义一个softbin时,你可以完全自由地在块中放入任何你想要的东西,所以在方程式中添加一个额外的Proc对我来说没有意义。
这里有两个可以组合的API,一个是定义函数来计算数字的能力:
config.softbins do |options|
# Put any logic you like in here, return the number at the end
end
另一个API是让TestIds跟踪范围内的位置的能力:
TestIds.next_in_range((1000..2000))
您可以根据自己的意愿在块内使用或不使用。
你应该完全自由地定义你喜欢的规则:
config.softbins needs: bin do |options|
if Time.now.tuesday?
bin_map = { 5: (1..10), 11: (11..20) }
else
bin_map = { 6: (10..20), 12: (21..30) }
end
TestIds.next_in_range(bin_map[options[:bin]])
end
请注意,如果您在不同分支中引用相同的next_in_range
,那么它们将使用相同的数字集合。
如果您希望它们各自在该范围内独立计数,那么您需要设置不同的配置,以便它们各自拥有自己的数据库:
if Time.now.tuesday?
TestIds.configure :rule1 do |config|
end
else
TestIds.configure :rule2 do |config|
end
end