我有一个选项哈希和一个更新它的方法 - 但是选项哈希可以改变,如果确实如此,我希望我的测试失败。写这个的好方法是什么?
raise RuntimeError, msg unless options.keys.include?(
:external_uid,
:display_name,
:country_code
)
如果options.keys
不包含这三项,则应引发错误。
我几乎使用的解决方案(感谢bjhaid):
def ensure_correct_options!(options)
msg = "Only 'external_uid', 'display_name' and 'country_code' can be "
msg += "updated. Given attributes: #{options.keys.inspect}"
raise RuntimeError, msg unless options.keys == [
:external_uid,
:display_name,
:country_code
]
end
答案 0 :(得分:4)
选项可能有值,所以我会写:
unless options[:external_uid] && options[:display_name] && options[:country_code]
raise ArgumentError, ":external_uid, :display_name and :country_code required"
end
(我已将RuntimeError
替换为ArgumentError
,因为这似乎与论据有关)
答案 1 :(得分:1)
如果要测试包含在哈希中的键的值超过三个,您可能会这样做:
unless ([:external_uid, :display_name,...] - options.keys).empty? \
raise ArgumentError, ":external_uid, :display_Nam,... are required"